按顺序订阅可观察对象并在两者之间执行操作

Subscribe to observables in order and do actions in between

我尝试使用 rxjs 运算符 concat 以正确的顺序订阅 3 个相互依赖的可观察对象。在第一个和第二个可观察对象之间以及最后一个可观察对象之后必须执行一些操作。最大的问题:第一个的结果必须传递给第二个。我试过一些东西。例如:

let foo = {};
concat(
  observable1().pipe(map(result => foo.id = result)),
  observable2(foo),
  observable3().pipe(map(() => console.log('ready')))
).subscribe();

没有像预期的那样工作。可观察对象将以正确的顺序订阅,但第一个订阅的结果不会传递给第二个。 Angular 版本为 8.

您正在寻找concatMap

在这个例子中,我不确定它是否正确输出,提供更多细节

import { of, concat } from "rxjs";
import { concatMap, map } from "rxjs/operators";

let foo = {};
obs1(1)
  .pipe(
     map(result => {
      foo["id"] = result;

      return foo || result
    }),
    concatMap(resultOfFirst => obs2(resultOfFirst)),
    concatMap(resultOfSecond => obs3())
  )
  .subscribe(console.log);
function obs1(simpleData) {
  return of(simpleData);
}

function obs2(simpleData) {
  return of(simpleData);
}

function obs3() {
  return of("ready");
}

演示:https://stackblitz.com/edit/typescript-uqhyei?file=index.ts&devtoolsheight=100