【发布时间】:2019-03-20 21:44:14
【问题描述】:
我正在尝试设置一个简单的队列,然后使用 rxjs Observables 进行轮询直到完成样式机制,并且一直在努力找出我做错了什么。
我有以下代码
siteService.queue("123") //(1) Queues a processing task
.pipe(
switchMap((res) => {
console.log("Polling for changes...");
return timer(100, 2000) //(2)
.pipe(
flatMap(() => {
console.log("Fetching Site...");
return siteService.get("123); //(3)
}),
takeWhile((res: SiteResponse) => {
let r = res.site.site_generation_status !== 'Current';
console.log("Take While", r); //(4)
return r;
})
);
})
)
.subscribe((res) => {
console.log("Result", res);
}, (err) => {
console.error("Error", err);
}, () => {
console.log("Done")
});
此代码应将一些处理请求 (1) 排队,然后将站点对象的 site_generation_status 设置为“已排队”,并由一些后端进程完成,最终将状态更新为“当前” '。这个想法是计时器 (2) 最初应该在 100 毫秒后获取结果,然后每 2000 毫秒运行一次,直到 generation_status 为当前状态。
这段代码大部分都有效,但是,在 takeWhile (4) 计算结果为 false 后,(3) 处的调用继续执行
这是一些控制台输出
Polling for changes...
Fetching Site...
Take While true
Result {site: {…}}
Fetching Site...
Take While true
Result {site: {…}}
Fetching Site...
Take While true
Result {site: {…}}
Fetching Site...
Take While false
Done
Fetching Site...
Fetching Site...
Fetching Site...
Fetching Site...
在 takeWhile 评估为 true 并且订阅结束(由日志输出中的“完成”指示)之后,可能导致 (3) 处的命令继续执行的原因是否有人有任何想法
【问题讨论】:
标签: rxjs