Rxjs forkjoin不等待所有可观察对象完成,因为每个可观察对象都没有发出任何值

Rxjs forkjoin不等待所有可观察对象完成,因为每个可观察对象都没有发出任何值,rxjs,observable,rxjs6,Rxjs,Observable,Rxjs6,我有几个可观察的要求。 每个可观察到的请求都是递归调用,当没有更多数据时,它将调用EMPTY 例如: request1 = recursive observable call request2 = recursive observable call request3 = recursive observable call 然后我用forJoin forJoin(request, request2, request3).subscribe(); 当其中任何一个完成时,forkJoin将回调co

我有几个可观察的要求。 每个可观察到的请求都是递归调用,当没有更多数据时,它将调用EMPTY

例如:

request1 = recursive observable call
request2 = recursive observable call
request3 = recursive observable call
然后我用forJoin

forJoin(request, request2, request3).subscribe();
当其中任何一个完成时,forkJoin将回调complete。事实上,它并不是等待所有的观测结果完成。 我查看了rxjs文档,它提到

当所有观测值完成时,从每个观测值发出最后发出的值

因为我不关心这些可观察的返回值,所以它不会向forkJoin观察者发出值。然后我发现,在这种情况下,如果只有一个完整的,forkJoin观察者会收到complete通知

这是我需要发出值才能等待所有可观察到的完成的可观察到的限制吗

非常感谢。

是的

参考:

forkJoin
如果其中一个流完成而未发出值,则短路

由于只发出“complete”而没有其他信息,
forkJoin
将在此处完成


实际上,
forkJoin
中的其他非空观察值仍将被订阅,但由于
forkJoin
可能会在它们之前完成(取决于
forkJoin
中何时出现了
empty
),您可能无法在
forkJoin
complete
函数中处理它们。

实际上,您需要的行为非常混乱<代码>forkJoin将不会完成,除非所有源可观察对象至少发出一个值。如果一个源刚刚完成并且没有发出任何东西,
forkJoin
将永远不会完成。在我的测试中,当一个源发出complete时,forkJoin实际上完成了。最后,我将使用在完成之前发出一个值。您只需返回(true)而不是空,这将使用一个值完成流。