订阅:
this.documentChange.asObservable().subscribe(value => {
if (this.autosave) {
value._id = this.documentId;
this.updateDocument(value, change);
}
});
它的工作原理是这样的:this.documentChange.next(value)
之后,可以进行另一个操作 this.documentChange.next(value)
。
问题:如何让最后一个操作等待上一个操作结束?
next
这不是订阅的工作,而是事件的产生。没有所谓的“激活”😉,只需使用术语“事件”。
我将假设
updateDocument
这是某种异步操作,并且您希望文档更新请求按顺序处理,而不是并行处理。为此,使用了运算符
concatMap
,它在后台创建了一个队列:此外,您没有任何线程取消订阅,这会在 Angular 尝试释放组件的资源时泄漏内存:
然后
concatMap
添加一个运算符takeUntil
: