【问题标题】:how to wait for an observable but return the previous observable result in rxjs?如何等待一个 observable 但在 rxjs 中返回之前的 observable 结果?
【发布时间】:2021-02-11 22:49:26
【问题描述】:

我有以下序列要执行:

  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,因为它并行启动每个可观察对象,我显然不希望在执行.get() 或.set() 时执行.clear()。

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

  • 启动第一个 Observable
  • 等到第一个 Observable 开始第二个
  • 然后返回两个结果的数组(或映射)

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

【问题讨论】:

    标签: angular typescript rxjs


    【解决方案1】:

    使用delayWhen

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

    【讨论】:

    • 我知道有一个简化!我必须开始用这些东西制作一本食谱书……
    • 这里不是丢失了storage.get()返回的值吗?
    • 好吧,我猜不是!通常,使用可管道运算符,前一个的返回将被推送到下一个,但是在查看delayWhen 的源之后,我可以看到它在内部映射回它收到的值(并且不发出可观察到其源头的排放)。直到。
    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 2020-10-25
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多