我目前正在forkJoin等待Observable(s)数组在pipe(ing)和tap(ping)之前完成。
我注意到如果数组为空,则什么也不会发出,甚至也不能tap。我该如何解决这类问题?我应该只检查数组是否为空吗?
myFirstFunction(...) {
const observables = ...
return forkJoin(observables)
}
mySecondFunction(...) {
return myFirstFunction().pipe(tap(() => ...))
}
Run Code Online (Sandbox Code Playgroud)
另外马丁的回答。
我有 2 个可观察值返回数组,如果其中一个给我一个空数组,它不会等待另一个可观察值完成并立即完成。您可以使用以下方式处理此类情况defaultIfEmpty。
const response1: Observable<any[]> = this.service.getResponse(params1).pipe(defaultIfEmpty([]));
const response2: Observable<any[]> = this.service.getResponse(params2).pipe(defaultIfEmpty([]));
Observable.forkJoin(response1, response2).subscribe((response) => {
console.log(response);
}, () => {
console.log('handle error here');
}, () => {
console.log('completed');
});
Run Code Online (Sandbox Code Playgroud)
那是因为forkJoin要求所有源Observable至少发射一项,并且当没有源Observable时什么也没有发射。但是,forkJoin仍然会发送complete通知,因此您可以使用例如defaultIfEmptyoperator来确保它始终发出至少一个next。
forkJoin(observables).pipe(
defaultIfEmpty(null),
).subscribe(...);
Run Code Online (Sandbox Code Playgroud)
演示:https : //stackblitz.com/edit/rxjs-kkd1qa?file=index.ts
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |