【问题标题】:RXJS Timer continues to run after takeWhile operator returns 'false'RXJS 定时器在 takeWhile 运算符返回 'false' 后继续运行
【发布时间】: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


    【解决方案1】:

    啊..在发布问题 5 分钟后,我一定很乐意解决问题..

    问题是我导入了错误的计时器,它并没有严重错误到导致代码执行出现明显问题(可能是下一个人的教训)。

    问题是我通过 IDE 导入的

    import { timer } from "rxjs/internal/observable/timer";
    

    但正确的导入是

    import { timer } from 'rxjs';
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2021-08-02
      • 2015-05-19
      • 2011-11-30
      • 1970-01-01
      相关资源
      最近更新 更多