我有一个流行的场景,我需要创建一个返回数据的 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
) - 确保资源处置(使用
finally
或using
) - 延迟错误(使用
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/