为什么操作员forkJoin不起作用?

时间:2018-07-21 11:24:50

标签: javascript rxjs

我正在尝试添加两个可观察的。但是控制台不会显示任何内容。

var s = Rx.Observable.of(100, 200, 300);
var s1 = Rx.Observable.interval(1000);

var sub = Rx.Observable.forkJoin(s, s1)

sub.subscribe(x => console.log(x));

live example here

对于两个同步可观测对象而言,没有问题

2 个答案:

答案 0 :(得分:0)

forkJoin仅在其所有源可观察对象至少发出一项并且全部完成时发出。使用Observable.of很好。它发出所有值并立即完成。但是Observable.interval永远不会自己完成(例如,您可能希望将其与take(N)链接起来。

var s1 = Rx.Observable.interval(1000).take(1);
// Now both source Observables complete so `forkJoin` will complete as well
var sub = Rx.Observable.forkJoin(s, s1);

答案 1 :(得分:0)

如果您在官方文档中查找forkJoin() function,将会看到:

  

forkJoin将等待所有传递的Observable完成,然后它将发出一个数组,其中包含来自相应Observable的最后一个值。

如果您查看interval() function

  

interval返回一个Observable,它发出无限个递增的整数序列...。

因此,您的forkJoin可以正常工作,它将永远不会console.log(),因为interval函数不会结束。