我有一个可观察的const numbers = from([1,2,3])
,它将发出1,2,3,然后完成。
我需要将此映射到另一个可观察到的像这样
const mapped = numbers.pipe(
concatMap(number => Observable.create(observer => {
observer.next(number);
}))
);
但是现在生成的可观察的mapped
发出1,2,3而不是完整事件。
如何在mapped
中保存完整的事件?
答案 0 :(得分:2)
您的代码仅给我“ 1
”(使用RxJS 6);您确定看到3个值了吗?
Rx.from([1,2,3]).pipe(
op.concatMap(number => Rx.Observable.create(observer => {
observer.next(number);
}))
).forEach(x => console.log(x)).then(() => console.log('done'))
您永远不会完成创建的Observable(它会发出一个值,但不会调用observer.complete()
)。这有效:
Rx.from([1,2,3]).pipe(
op.concatMap(number => Rx.Observable.create(observer => {
observer.next(number); observer.complete();
}))
).forEach(x => console.log(x)).then(() => console.log('done'))
这一切都说明正确使用Rx.Observable.create()
有多么困难。使用Rx的目的是使用更高级别的抽象来编写代码。其中很大一部分是优先于观察者使用运算符。例如。在您的情况下(这很简单):
Rx.from([1,2,3])
.pipe(op.concatMap(number => Rx.of(number)))
.forEach(x => console.log(x)).then(() => console.log('done'))