我正在尝试设置一个简单的队列,然后进行轮询,直到使用RXJS可观察到完整的样式机制,并一直在努力弄清楚我在做什么错。
我有以下代码
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_generation_status 设置为"排队",并将通过某些后端进程来实现,最终将状态更新为"当前状态"'。这个想法是,计时器(2)最初应在100ms之后获取结果,然后每2000毫秒运行,直到generation_status是当前的。
此代码大多有效,但是,在(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...
任何人对可能导致命令在(3)上继续执行的命令的想法是否有任何想法,并在对true进行评估和订阅结束之后(在日志输出中以'DONE'表示)
)arghh ..要在发布问题5分钟后弄清楚问题..
问题是我进口了错误的计时器,该计时器并没有大大错误,无法在执行代码执行时引起明显的问题(也许是下一个人的课程)。
问题是我进口的IDE
import { timer } from "rxjs/internal/observable/timer";
但是正确的导入是
import { timer } from 'rxjs';
神奇的现在我的代码按预期工作