angular - 如何等待一个 observable 但在 rxjs 中返回之前的 observable 结果?
问题描述
我有以下序列要执行:
- 读取一小段数据
- 清除数据存储
- 重新保存 (1) 中的一小部分数据
每个操作都由一个返回Observable
. 这是我想出的顺序:
this.storage.get('key').pipe(
switchMap((x) => this.storage.clear().pipe(map(()=>x))),
switchMap((x) => this.set('key', x)
);
反复使用switchMap()
感觉很脏。这个序列确实有效,但我想知道是否有简化。
我尝试使用concat()
启动,但它单独发出每个值。我认为我不能使用merge
,因为它并行启动每个 observable,我显然不希望在.clear()
执行.get()
or时执行.set()
。
我可以使用什么运算符或创建函数:
- 启动第一个 Observable
- 等到第一个 Observable 开始第二个
- 然后返回两个结果的数组(或映射)
或者是否有双重调用的简化switchMap()
?
解决方案
使用延迟时间
this.storage.get('key').pipe(
delayWhen(() => this.storage.clear()),
switchMap((x) => this.set('key', x))
);
推荐阅读
- javascript - Ajax 调用使 jQuery 代码行为不端并破坏布局
- ios - 为不同的目标声明常量
- c++ - 从 C++ 代码通过 PQsendQuery 执行 sql 时 Postgres SQL 解析错误 - SQLState:42601 消息:在“”或附近出现语法错误
- mysql - 如何在单个语句中使用 AND 和 OR
- excel - 批量修改条目电子表格 - excel libreoffice calc
- reactjs - preload.ts 中的 contextBridge.exposeInMainWorld:ipcRenderer 接收到来自 main.ts 的消息,但渲染器没有得到它
- javascript - 根据“喜欢”状态更改 SVG 图标颜色
- c++ - 与 const_cast 相反
- sabre - 如何修复“服务提供者调用失败”错误?
- excel - 更改分组文本框的文本