rxjs - 如何跨两个 RxJS 可观察对象保留“完整”事件?
问题描述
我有一个 observable const numbers = from([1,2,3])
,它将发出 1、2、3,然后完成。
我需要将其映射到另一个可观察的,例如:
const mapped = numbers.pipe(
concatMap(number => Observable.create(observer => {
observer.next(number);
}))
);
但是现在生成的 observablemapped
发出 1, 2, 3 但不是完整的事件。
如何保存完整的事件mapped
?
解决方案
您的代码只给了我“ 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'))
推荐阅读
- python-3.x - 过滤没有任何 NaN 的行,并且日期在 Pandas 中是连续的
- c# - 使用堆栈的 C# 解决方案
- python - 无法理解在 if...else... 语句 Python 中使用的逻辑表达式
- c# - 用于渲染表格单元格/行结构的 GridView 的渲染逻辑位于何处?
- php - 当我尝试为登录表单运行 PDO 代码时出现错误
- c# - DataService 授权标头 SendingRequest2 在本地工作,但不在测试服务器上
- css - “日期”类型的离子输入具有错误颜色的日历图标
- java - 在 cron 下运行时 Java 作业不写入文件
- sql - 使用 SQL 或 Linq to Object 重构表/实体
- javascript - 如何在 React 本机 ble-pplx 中停止 monitorCharacteristic