在takeWhile操作符返回'false'后,RXJS Timer继续运行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在takeWhile操作符返回'false'后,RXJS Timer继续运行相关的知识,希望对你有一定的参考价值。
我正在尝试设置一个简单的队列,然后使用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设置为“Queued”,并由一些后端进程完成,最终将状态更新为“Current”。这个想法是定时器(2)应该在100ms之后最初获取结果,然后每2000ms运行一次,直到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并且订阅结束(由日志输出中的'Done'表示)之后,是否有任何人想知道可能导致(3)处的命令继续执行的原因
Arghh ..想要在发布问题5分钟后搞清楚问题..
问题是我导入了错误的计时器,这个计时器没有发生严重错误,导致代码执行出现明显问题(也许是下一个人的教训)。
问题是我导入了我的IDE
import timer from "rxjs/internal/observable/timer";
但正确的导入是
import timer from 'rxjs';
并且神奇地现在我的代码按预期工作
以上是关于在takeWhile操作符返回'false'后,RXJS Timer继续运行的主要内容,如果未能解决你的问题,请参考以下文章
使用 takewhile (itertools) 考虑最后一次迭代
java 中的Takewhile方法 和Dropwhile方法
exist 存在 Python操作mysql pymysql sql注入问题 # 39