我有一个流行的场景,我需要创建一个返回数据的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
});
现在我正在尝试使用像RxJS之类的东西来学习使用Observables的最佳方法。有谁能给我一个很好的解决方案? 提前谢谢!
答案 0 :(得分:1)
使用RxJS处理错误的一般问题由here处理。要点是:
catch
运算符,无论是在实例级别还是在类级别)onErrorResumeNext
retry
)finally
)finally
或using
)mergeDelayError
)关于您的具体问题,您可以使用Rx.Observable.fromPromise
将承诺转换为可观察的内容; 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 !!
});
示例:
答案 1 :(得分:0)
我也能找到一个很好的通用解决方案来实现我的承诺和链接#39;在做了一些研究之后。有了这个,我可以根据需要使用许多承诺。
const flatMapAll = (...fns) =>
fns.reduce((acc, fn) =>
acc.flatMap(fn), Rx.Observable.just())
flatMapAll( p1 ,p2 ,p3).subscribe();