【发布时间】:2019-01-16 22:19:08
【问题描述】:
我有一些代码会轮询直到任务完成
见下文
this.simulationStatus =
interval(2000).pipe(
switchMap(
() => from(this.simulationService.getSimulationStatus(this.route.snapshot.paramMap.get('jobId')))),
takeUntil(this.stopPoll),
tap(simulation => {
if (simulation && simulation.complete) {
if (this.stopCount == 1) {
// Get once after complete
this.stopPoll.next(true);
}
this.stopCount++;
}
})
);
我曾尝试使用 takeUntil 和 takeWhile,但问题是一旦任务完成,最后一个值就永远不会发布。
为了解决这个问题,我必须在 stopPoll 主题中包含 tap 方法,并增加 stopCount 以获取最后一个值。
所以上面的工作,但感觉有点乱,我敢肯定一定有更好的方法来实现这一点?
我本来希望 takeUntil 发布最后一个值或有一个覆盖来告诉它,例如 takeUntil(observable, {publishLast: true})
BTW 更新,可观察对象由 Angular 6 模板订阅 提前致谢
【问题讨论】:
标签: angular6 rxjs6 rxjs-pipeable-operators