我有一个弹出式模式,当用户点击模式提交时,它会进入我的数据库并在那里保存一些数据。之后,模式关闭。 但是,由于它是一种模式,用户可以通过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。期。 –