【问题标题】:Get first fulfilled promise in RxJS在 RxJS 中获得第一个履行的承诺
【发布时间】:2019-10-04 03:49:43
【问题描述】:

类似于Get first fulfilled promise,但在 RxJS 中

如果我有两个 Promise A 和 B,其中只有一个会成功,我怎样才能得到哪个成功实现?一些承诺也会被拒绝。只需要成功的承诺。

我正在寻找类似于 Promise.race 的东西,但它只会返回第一个实现的承诺。我正在使用来自 RxJS6 的 Promise。

【问题讨论】:

  • “我正在使用来自 RxJS6 的 Promise”——你的意思是你有 Observables 吗?或者你正在将 Promise 包装到 Observables 中?

标签: rxjs rxjs6


【解决方案1】:

RxJS 也有race

import {race} from 'rxjs'

race(promiseA, promiseB).subscribe(result => console.log('winner is ' + result))

【讨论】:

  • 是否只将成功的promise视为赢家,而不将拒绝的promise视为赢家?
  • 没有。它就像 Bluebird 的 Promise.race 一样工作。一旦任何 Promise(或 observables)解决或拒绝,该结果将交付给您的订阅者,而其他结果将被忽略。
  • @user1595858 如果您只需要成功的结果——通过管道将catchError 抑制到每个源的错误,例如:race( a$.pipe( catchError(()=>NEVER) ), b$.pipe( catchError(()=>NEVER) ) )。如果您的所有源都失败了,则需要更复杂的解决方案来处理这种情况。
猜你喜欢
  • 2016-06-05
  • 2015-11-17
  • 2017-02-17
  • 2014-06-04
  • 2019-09-11
  • 2023-03-19
  • 1970-01-01
  • 2016-02-04
相关资源
最近更新 更多