我有一些代码可以轮询直到任务完成
见下文
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})
顺便说一句更新,可观察到的订阅由 Angular 6 模板提前谢谢