RXJS 计时器在 take 后继续运行,而运算符返回"false"



我正在尝试设置一个简单的队列,然后进行轮询,直到使用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';

神奇的现在我的代码按预期工作

最新更新