【发布时间】:2021-08-01 13:19:14
【问题描述】:
我有一个函数getC,它依赖于getB 的输出,它依赖于getA 的输出。我想创建一个可观察的stream,这样当我订阅它时,我就能得到每个函数的输出,如sn-p所示。
RxJS 中是否有一个运算符可以提供与 sn-p 中相同的行为?还是嵌套switchMap、concat 和of 是唯一的方法?
const { concat, from, of } = rxjs
const { switchMap } = rxjs.operators
const getA = async() => new Promise(resolve => setTimeout(() => resolve({
a: 'A'
}), 500));
const getB = async value => new Promise(resolve => setTimeout(() => resolve({
a: value.a,
b: 'B',
}), 500));
const getC = async value => new Promise(resolve => setTimeout(() => resolve({
a: value.a,
b: value.b,
c: 'C',
}), 500));
const stream = from(getA()).pipe(
switchMap(a => concat(
of(a),
from(getB(a)).pipe(
switchMap(b => concat(
of(b),
getC(b)
)
)
)
))
);
stream.subscribe(value => {
console.log(value);
});
<script src="https://unpkg.com/rxjs@7.3.0/dist/bundles/rxjs.umd.min.js"></script>
【问题讨论】:
标签: javascript rxjs