我目前正在使用forkJoin等待Observable(s)数组在pipe(ing)和tap(ping)之前完成。

我注意到如果数组为空,则不会发出任何内容,甚至无法tap。我该如何解决这类问题?我应该只检查数组是否为空吗?

myFirstFunction(...) {
   const observables = ...
   return forkJoin(observables)
}

mySecondFunction(...) {
   return myFirstFunction().pipe(tap(() => ...))
}

最佳答案

这是因为forkJoin要求所有源Observable至少发出一项,而当没有源Observable时则什么也没有发出。但是,forkJoin仍然会发送complete通知,因此您可以使用defaultIfEmpty运算符来确保它始终发出至少一个next

forkJoin(observables).pipe(
  defaultIfEmpty(null),
).subscribe(...);

演示:https://stackblitz.com/edit/rxjs-kkd1qa?file=index.ts

关于RxJs-具有空数组的forkJoin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53477784/

10-11 05:16