首页 > 解决方案 > 在 ConcatMap 中使用延迟,Observable 只发出一次

问题描述

给定以下代码:

range(1, 30)
  .pipe(
    windowCount(10),
    concatMap(x => x.pipe(delay(5000))),
  )
  .subscribe(console.log);

由于某种原因,只发出了第一个值(1..10),有人能指出上面的代码有什么问题吗?谢谢。

预期输出:1..10(延迟)11..20(延迟)等等....

标签: rxjs

解决方案


发生这种情况是因为windowCount将在创建新窗口之前完成先前的内部“窗口”。您将每个“窗口”延迟 5 秒,但是当concatMap想要订阅下一个“窗口”时,它已经完成并且永远不会发出任何东西。

请注意,这windowCount将尽快发出所有窗口,无论是否concatMap有机会订阅它们。


推荐阅读