forkjoin的输出顺序是否始终与参数的顺序相同?

时间:2018-08-10 07:15:24

标签: angular rxjs

嗨,我在学习Angular时对forkjoin感到好奇。

我听说forkjoin有两个参数。

参数和resultSelector

我为此编写了以下示例。

Observable.forkJoin(
    [ObservableFunctionOne(),
    ObservableFunctionTwo()],
    function(x,y){}).subscribe((results) => {})

我知道x和y是ObervableFunction的结果,而Results是结果的数组。

我想在这里知道x和y的顺序以及结果的顺序始终遵循ObservableFunction的调用顺序。

也就是说,我想知道是否始终满足x ==结果[0] == ObservableFunctionOne()和y =结果[1] == ObservableFunctionTwo()。

如果假设是正确的,我想知道如果一个ObservableFunction减慢响应速度会发生什么。

谢谢

1 个答案:

答案 0 :(得分:2)

  

我听说forkjoin有两个参数。   参数和resultSelector

请注意,使用rxjs 6时,resultSelector参数已被删除,因此在以前的版本中已弃用。

  

我想在这里知道x和y的顺序以及结果的顺序始终遵循ObservableFunction的调用顺序。

是的,forkJoin将按照调用时观察值的排序方式对发射的值进行排序。这可以保证。

  

我想知道一个ObservableFunction减慢响应速度会发生什么情况。

forkJoin仅发射所有可观察值都已完成(!)并至少发射一次(!)。对于HTTP请求,完成通常与发出同时发生,尽管如此,这意味着所有可观察到的输入都必须发出。

如果可观察的错误之一未完成,则结果将不会发出。如果要处理这种情况,可以捕获错误:

forkJoin([
  this.http.callA().pipe(catchError(() => of(null))),
  this.http.callB().pipe(catchError(() => of(null)))
]).subscribe(([resultA, resultB]) => {
  // if either request failed, resultA / resultB will now just be null
});