javascript - Observable - 将 2 个 Promise 转换为一个 Observable

标签 javascript rxjs observable es6-promise

我有一个流行的场景,我需要创建一个返回数据的 Promise,然后将数据提供给第二个 Promise。 如果第一个 promise 失败,我需要取消第二个 promise 。 在“ promise ”之地,它看起来像这样:

Fn1.doPromise( initialData )
  .then(info => {
        Fn2.doPromise( info )
              .then(result => {
                  //success - return result
              })
              .catch(error => {
                //error
              });
  })
.catch(error => {
  //cancel 2nd promise and show error
});

现在我正在尝试学习使用 Observables 和 RxJS 之类的东西来做到这一点的最佳方法。谁能给我一个好的解决方案吗? 提前致谢!

最佳答案

RxJS 错误处理的一般问题已解决 here 。要点是:

  • 捕获错误(使用 catch 运算符,在实例级别或类级别)
  • 使用 onErrorResumeNext 忽略错误
  • 重试序列(使用 retry)
  • 确保清理(使用 finally)
  • 确保资源处置(使用 finallyusing)
  • 延迟错误(使用 mergeDelayError)

关于您的具体问题,您可以使用 Rx.Observable.fromPromise将 Promise 转换为 Observable; Rx.Observable.prototype.catch捕获发生的错误。

Rx.Observable.fromPromise(Fn1.doPromise( initialData ))
  .flatMap(info => {
        return Rx.Observable.fromPromise(Fn2.doPromise( info ))
              .flatMap(result => {
                  //success - return result
                  // !! You must return an observable or a promise here !!
              })
              .catch(error => {
                //error
                // !! You must return an observable here !!
              });
  })
.catch(error => {
  //cancel 2nd promise and show error
  // !! You must return an observable here !!
});

示例:

关于javascript - Observable - 将 2 个 Promise 转换为一个 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34951787/

相关文章:

angular - 将 http post1 的响应传递给另一个并从 Angular 中的 post2 获取响应

javascript moment.js 脚本无法正常工作

rxjs:从一组 Observables 中获取最后一个值

ios - 订阅 Observable 时如何在 onNext 情况下获取状态码

android - Logcat 和 toast 的 RxJava onNext 方法

reactive-programming - 捕获可观察量之间的循环依赖

JavaScript 制作快速运行的图像幻灯片?

javascript - Jquery 在服务器上显示隐藏问题

javascript - Onclick渲染新组件并隐藏当前组件?

angular - rxjs:带索引的 map