J'ai un pop up modal, lorsque l'utilisateur clique sur soumettre dans le modal, il va à ma base de données et enregistre des données là-bas. Le modal est fermé après cela. Cependant, comme il s'agit d'un modal, l'utilisateur peut le fermer via le bouton ESC. Donc, je veux m'assurer que même si l'utilisateur appuie sur ESC, l'async se termine sans se couper au milieu.traite-t-Async complet comme prévu, même lorsque le composant est détruit
Par exemple.
// from my modal component
onSubmit() {
this.databaseService.saveToDatabase(data)
.first()
.subscribe(result => {
console.log('complete')
closeModal();
}, error => {
console.log(error)
})
}
ngOnDestroy() {
console.log('modal Desstroyed')
}
Pour l'exemple ci-dessus, si je pressais esc dès que je frappe soumettre, je vois de la console
modal Destroyed
complete
Cela donne à penser que mon arrivée d'appel async comme prévu ce qui est bon. Je l'ai trouvé bizarre si ..... pourquoi Angular 2 ne s'est pas accroché au composant jusqu'à ce que le processus asynchrone se termine. Comment ma finition fonction onSubmit même si le composant a été détruit (en supposant que ce qui arrive quand ngOnDestry() est appelée). Dans un autre langage tel que Swift, le contrôleur de vues n'est pas détruit tant que tout le processus n'est pas terminé (sauf si vous le spécifiez pour être détruit). est beaucoup plus long comme le suivant. Vais-je arriver encore «2ème étape complète si je ferme le modal immédiatement après avoir appuyé sur le bouton soumettre
// from my modal component
onSubmit() {
this.databaseService.saveToDatabase(data)
.first()
.subscribe(result => {
console.log('complete 1st stage')
this.databaseService.saveToDatabase(reult)
.first()
.subscribe(result => {
console.log('2nd stage complete')
closeModal();
})
})
}
'onSubmit' se termine immédiatement, bien avant que la requête soit terminée. C'est une fonction de feu et d'oubli comme vous l'avez défini. Cela se produit indépendamment du fait que vous fermiez ou non le modal. Sur soumettre passe une fermeture pour vous abonner. En savoir plus sur les fermetures, en apprendre davantage sur le cadrage lexical, en savoir plus sur JavaScript. Vous ne pouvez pas comprendre TypeScript si vous ne comprenez pas JavaScript. Période. –