我尝试使用 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。
答案 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