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

时间:2021-01-20 20:18:04

标签: angular rxjs observable concatenation subscribe

我尝试使用 rxjs 操作符 concat 以正确的顺序订阅 3 个相互依赖的 observable。在第一个和第二个 observable 之间以及在最后一个 observable 之后必须做一些动作。最大的问题:第一个的结果必须传递给第二个。我已经尝试了几件事。例如:

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

没有像预期的那样工作。 observable 将按正确的顺序订阅,但第一个订阅的结果不会传递给第二个。 Angular 版本是 8。

1 个答案:

答案 0 :(得分:1)

您正在寻找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