Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rxjs 在ConcatMap中使用延迟时,Observable仅发射一次_Rxjs - Fatal编程技术网

Rxjs 在ConcatMap中使用延迟时,Observable仅发射一次

Rxjs 在ConcatMap中使用延迟时,Observable仅发射一次,rxjs,Rxjs,具有以下代码: 范围(1,30) .烟斗( 窗口计数(10), concatMap(x=>x.pipe(延迟(5000)), ) .subscribe(console.log); 出于某种原因,只会发出第一个值(1..10),有人能指出上面的代码有什么问题吗?谢谢 预期输出:1..10(延迟)11..20(延迟)等等….之所以发生这种情况,是因为windowCount将在创建新的内部“窗口”之前完成上一个内部“窗口”。您将每个“窗口”延迟5秒,但是当concatMap想要订阅下一个“窗口”时,

具有以下代码:

范围(1,30)
.烟斗(
窗口计数(10),
concatMap(x=>x.pipe(延迟(5000)),
)
.subscribe(console.log);
出于某种原因,只会发出第一个值(1..10),有人能指出上面的代码有什么问题吗?谢谢


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

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

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

我最终使用了它们,并实现了预期的输出

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

不会“记住”下一个可观察对象,尽管在上一个可观察对象完成之前,它不会订阅下一个可观察对象?它会保留一个缓冲区,其中包含它接收到的所有源值。但缓冲的观察对象实际上是已经完成的对象。因此,
concatMap
尝试对它们进行sibscribe,但除了使用
windowCount
之外,什么也不会发生。如果使用
bufferCount
,会怎么样?是的,
bufferCount
只在内部使用数组,或者也可以使用
scan
。如果它没有完成,就没有办法完成它。这就是它的实现方式。如果它没有完成,它将无法与
concatMap
一起工作,因为它要等到内部可观察对象完成。我想了解这个特定的行为,谢谢你的回答!我对你的答案投了赞成票