嗨,我在学习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减慢响应速度会发生什么。
谢谢
答案 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
});