我有一個彈出式模式,當用戶點擊模式提交時,它會進入我的數據庫並在那裏保存一些數據。之後,模式關閉。 但是,由於它是一種模式,用戶可以通過ESC按鈕關閉它。所以我想要確保即使用戶按ESC鍵,異步仍然完成而不會在中間被切斷。即使組件被破壞,異步過程是否完成如期完成
例如。
// 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')
}
對於上面的例子,如果我一旦按下ESC鍵,我點擊提交,我從控制檯看到
modal Destroyed
complete
這表明,預期我的異步調用完成,這是很好。我發現它很奇怪,但是爲什麼沒有Angular 2掛在組件上,直到異步過程完成。 即使組件已被銷燬,我的onSubmit函數如何完成(假設這是在調用ngOnDestry()時發生的情況)。在另一種語言如Swift中,視圖控制器不會被破壞,除非所有的過程完成(除非你指定它被銷燬,無論如何)
另一個例子,我還沒有測試過......如果異步調用比以下更長。我仍然會達到「第二階段完成」如果我在按下提交按鈕
// 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'在請求完成之前很久就完成了。正如你所定義的那樣,它是一個消防和遺忘功能。無論您是否關閉模式,都會發生這種情況。在提交通過封閉訂閱。瞭解閉包,瞭解詞法範圍,瞭解JavaScript。如果你不懂JavaScript,你就無法理解TypeScript。期。 –