给定以下代码:
range(1, 30)
.pipe(
windowCount(10),
concatMap(x => x.pipe(delay(5000))),
)
.subscribe(console.log);
由于某种原因,只发出了第一个值(1..10),有人能指出上面的代码有什么问题吗?谢谢。
预期输出:1..10(延迟)11..20(延迟)等等....
给定以下代码:
range(1, 30)
.pipe(
windowCount(10),
concatMap(x => x.pipe(delay(5000))),
)
.subscribe(console.log);
由于某种原因,只发出了第一个值(1..10),有人能指出上面的代码有什么问题吗?谢谢。
预期输出:1..10(延迟)11..20(延迟)等等....
发生这种情况是因为windowCount将在创建新窗口之前完成先前的内部“窗口”。您将每个“窗口”延迟 5 秒,但是当concatMap想要订阅下一个“窗口”时,它已经完成并且永远不会发出任何东西。
请注意,这windowCount将尽快发出所有窗口,无论是否concatMap有机会订阅它们。
我最终使用了bufferCount并实现了预期的输出。
range(1, 30)
.pipe(
bufferCount(10),
concatMap(x => x.pipe(delay(5000))),
)
.subscribe(console.log);