我曾经开发过很多有承诺的东西,现在我正在转向 RxJS。 RxJS 的文档没有提供关于如何从承诺链转移到观察者序列的非常清晰的示例。
例如,我通常会编写包含多个步骤的承诺链,例如
// a function that returns a promise
getPromise()
.then(function(result) {
// do something
})
.then(function(result) {
// do something
})
.then(function(result) {
// do something
})
.catch(function(err) {
// handle error
});
我应该如何以 RxJS 风格重写这个承诺链?
对于数据流(相当于then
):
Rx.Observable.fromPromise(...)
.flatMap(function(result) {
// do something
})
.flatMap(function(result) {
// do something
})
.subscribe(function onNext(result) {
// end of chain
}, function onError(error) {
// process the error
});
承诺可以转换为可观察的Rx.Observable.fromPromise.
一些承诺运算符有直接翻译。例如RSVP.all
, or jQuery.when
可以替换为Rx.Observable.forkJoin
.
请记住,您有一堆运算符允许异步转换数据,并执行您无法或很难用 Promise 完成的任务。 Rxjs 通过异步数据序列(序列,即超过 1 个异步值)揭示了其所有功能。
对于错误管理,主题有点复杂。
- 有catch and finally运营商也
-
retryWhen
还可以帮助在出现错误时重复序列
- 您还可以使用以下命令处理订阅者本身的错误
onError
功能。
要获得精确的语义,请更深入地查看可以在网络上找到的文档和示例,或者在此处提出具体问题。
这绝对是使用 Rxjs 深入进行错误管理的一个很好的起点:https://xgrommx.github.io/rx-book/content/getting_started_with_rxjs/creating_and_querying_observable_sequences/error_handling.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)