【问题标题】:Avoiding nested subscriptions避免嵌套订阅
【发布时间】:2023-01-30 04:02:15
【问题描述】:

我需要按顺序执行多个 api 调用并在下一个调用中使用每个调用的响应。看起来有点像这样

from(Object.keys(someObj))
  .pipe(
    concatMap(key => this.getUsers(key)
  )
  .subscribe(res => ...)

上面的代码工作正常,但我需要延迟,以便某些组件可以处理 api 调用之间的数据。所以我做了

from(Object.keys(someObj))
  .pipe(
    concatMap(key => of(this.getUsers(key)).pipe(delay(1000))
   )
  .subscribe(res => ...)

这将返回一个嵌套的可观察对象。如何在没有嵌套订阅的情况下订阅内部可观察对象?

我试着做

.pipe(
  concatMap(key => of(this.getUsers(key)).pipe(delay(1000)), 
  mergeMap(res => res)
) 

但这会导致错误的响应顺序。

【问题讨论】:

  • switchMap 取消了之前的 http 调用。它对我不起作用

标签: angular rxjs


【解决方案1】:

感谢this answer。我调整了我的代码

from(Object.keys(someObj))
  .pipe(
    concatMap(key => merge(this.getUsers(key), EMPTY.pipe(delay(1000))
   )
  .subscribe(res => ...)

这不会给我一个嵌套的可观察对象,并且似乎可以很好地满足我的要求。 如果有更好的方法,请告诉我。

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 2020-08-18
    • 2020-05-31
    • 2022-08-25
    • 2019-10-03
    • 1970-01-01
    • 2023-01-11
    • 2020-11-30
    • 2022-06-22
    相关资源
    最近更新 更多