RxJS等待可观察对象的全部完成

Nic*_*ick 3 rxjs

我试图在下一个Observable执行之前完整地完成一个Observable的工作(这意味着调用Complete函数)。我尝试了许多不同的方法,但是最接近的是:

function() {
  observableA.subscribe(
    (value) => { },
    (err) => { },
    () => {
      createObservableB();
    }
  );
  return observableB; // ????
}
Run Code Online (Sandbox Code Playgroud)

但我需要从此函数的createObservableB()返回结果。同样,直到对observableA中的每个单个值都进行了完全迭代之前,无法调用createObservableB。

谢谢你的帮助!

Fan*_*ung 6

你可以尝试last操作

obsA.pipe(last(),mergeMap(()=>obsB)).subscribe()
Run Code Online (Sandbox Code Playgroud)

  • 这正是我所需要的,谢谢!传递到 mergeMap 的函数只有在第一个可观察的最后一项完成后才会执行。 (2认同)

mar*_*tin 5

更“干净”的解决方案将被使用,concat因为它仅在前一个完成时才一一订阅 Observables:

import { concat } from 'rxjs';

concat(observableA, observableB)
  .subscribe(...)
Run Code Online (Sandbox Code Playgroud)

如果您想忽略来自的所有值,observableA可以ignoreElements()在将其传递给concat( observableA.pipe(ignoreElements())) 时使用。

  • 感谢您的回答,但这并不能解决我的情况。如果有 functionA(functionB(), functionC()),JavaScript 将调用 functionB,然后调用 functionC,并将两个函数的返回值传递给 functionA。因此,您在开始迭代 observableA 中的值之前就调用了 functionC(在本例中为 createObservableB())。在调用 createObservableB 之前,我需要完全耗尽 observableA 。 (2认同)