【发布时间】:2018-09-09 16:17:49
【问题描述】:
我的 Angular 应用中有一个 Firebase 订阅,它会触发多次。 我如何实现将任务作为队列处理,以便我可以将每个任务同步运行一次?
this.tasks.subscribe(async tasks => {
for (const x of tasks)
await dolongtask(x); // has to be sync
await removetask(x);
});
问题是当 longtask 仍在处理时会触发 subribe 事件。
【问题讨论】:
-
使 longtask 返回一个在任务完成时完成的可观察对象并使用 concatMap。请注意,这种背压可能会导致内存泄漏。
-
为什么我必须从 longtask 返回一个 observable?
-
因为 concatMap 需要 observables。你当然可以在没有 observables 的情况下做到这一点,但是使用 rxjs 有什么意义呢?
-
你能粘贴一些代码吗?
-
this.tasks.pipe(concatMap(tasks => processTasks(tasks))).subscribe()。不能说更多,因为你没有说你的功能是做什么的。
标签: javascript firebase rxjs reactive-programming