Ste*_*fan 1 observable rxjs angular
我想将多个请求链接到从数组中获取的网址。在下一个链之前,我要等待上一个链完成。先前的失败与否无关紧要。我试图用forkJoin做到这一点,但我知道,如果请求之一失败,它将返回错误。
this.dataServers.forEach(dataServer => {
observableBatch.push(this.getFoodsByQuery(dataServer.url, query));
});
return Observable.forkJoin(observableBatch).subscribe(data => {
this.searchingServer.next(null);
observer.complete();
});
Run Code Online (Sandbox Code Playgroud)
我不知道如何用flatMap做到这一点。
在您的情况下,合适的操作员是concat
通过依次发出它们的值将多个Observable串联在一起,一个Observable接一个。
例:
// Batch of requests
let batch = [
Observable.of(1),
Observable.of(2).delay(1500),
Observable.throw('Error'),
Observable.of(3).delay(300),
Observable.throw('Error again'),
Observable.of(4).delay(600)
];
// Catch (ignore) error of every request
batch = batch.map(obs => {
return obs.catch(err => Observable.of(err));
});
// Concat observables
Observable.concat(...batch).subscribe({
next: v => console.log(v),
complete: () => console.log('Complete')
});
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
'Error'
3
'Error again'
4
'Complete'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3489 次 |
| 最近记录: |