当每个可观察变量无值发射时,forkjoin不等待所有可观察变量完成

时间:2018-09-26 07:35:24

标签: rxjs observable rxjs6

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

例如:

request1 = recursive observable call
request2 = recursive observable call
request3 = recursive observable call

然后我使用forJoin

forJoin(request, request2, request3).subscribe();

当其中任何一个完成时,forkJoin将以complete回调。实际上,它并不等待所有可观察对象完成。 我检查了rxjs文档,它提到了

  

所有可观测值完成后,从每个可观测值中发出最后一个发出的值。

由于我不在乎这些可观察对象的返回值,因此它不会向forkJoin观察器发出值。然后我发现,在这种情况下,如果只完成一个,则用complete通知forkJoin观察者。

这是我确实需要发出价值才能等待所有可观察对象完成的可观察限制吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

它是by design

参考文献here

forkJoin短路,如果其中一个流完成而没有发出值。

由于EMPTY仅发出“完成”而没有其他内容,因此forkJoin将在那里完成。

实际上,forkJoin中的其他非空可观察对象仍将被订阅,但是由于forkJoin可能在它们之前完成(取决于EMPTY何时出现在{{1}中) }),则可能无法在forkJoin的{​​{1}}函数中处理它们。