Est l'appel d'une fonction sur ngOnInit asynchrone?
Si j'appelle une fonction dans ngOnInit() qui rend observable appeler pour obtenir des données, est la ce.getSomething() appel en ngOnInit encore async ou ne ngOnInit attendre jusqu'à présent.getSomething() renvoie un résultat? Fait de "doSomethingElse" exécuté dans ngOnInit() avant ou après cette.getSomething() se termine?
ngOnInit() {
this.getSomething();
doSomethingElse;
}
getSomething() {
this.someService.getData()
.subscribe(
result => {
this.result = result;
},
error => this.errorMessage = <any>error);
}
OriginalL'auteur Felix | 2016-09-14
Vous devez vous connecter pour publier un commentaire.
ngOnInit()
sur elle-même, ne pas attendre pour les appels asynchrones.Vous pouvez vous-même de la chaîne de code à la façon dont il exécute uniquement lorsque l'appel asynchrone est terminée.
Par exemple ce que vous avez mis à l'intérieur de
subscribe(...)
est exécutée lorsque les données arrivent.Le Code qui vient après
subscribe(...)
est exécutée immédiatement (avant l'appel asynchrone a été achevé).Il y a quelques routeur du cycle de vie des crochets en attente pour le retour des promesses ou des observables, mais aucun des composants ou de la directive du cycle de vie des crochets.
mise à jour
Pour assurer le code après
this.getSomething()
est exécutée lorsquegetData()
est terminé de modifier le code pourNon, ça va (probablement) est exécutée avant la
http
appel dansgetSomething
finitions.Merci les gars, qui m'ont aidé. J'ai mis à jour la question un peu à clarifier et à l'ajout de la "doSomethingElse" ligne ngOnInit. Fondamentalement, comme @rinukkusu fait allusion, je suis curieux de savoir si "doSomethingElse" peut être exécutée avant l'doSomething() se termine (à supposer doSomethingElse est sans rapport avec les données récupérées à partir de getSomething()) de sorte que l'application n'est pas en attente pour l'appel de service à la fin.
getSomething()
est appelé,this.someService.getData()
est appelé (mais revient immédiatement,getSomething()
retourne,doSomethingElse()
est exécutée,ngOnInit()
retourne. Puis éventuellement, la réponse du serveur arrive etresult => { this.result = result}
est exécutée (vous pouvez voir ce que vous transmettez àsubscribe
comme l'enregistrement d'un gestionnaire d'événement).OriginalL'auteur Günter Zöchbauer