首页 > 解决方案 > 如何等待一个 observable 但在 rxjs 中返回之前的 observable 结果?

问题描述

我有以下序列要执行:

  1. 读取一小段数据
  2. 清除数据存储
  3. 重新保存 (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()

我可以使用什么运算符或创建函数:

或者是否有双重调用的简化switchMap()

标签: angulartypescriptrxjs

解决方案


使用延迟时间

this.storage.get('key').pipe(
  delayWhen(() => this.storage.clear()),
  switchMap((x) => this.set('key', x))
);

推荐阅读