【发布时间】:2017-07-27 08:18:54
【问题描述】:
我正在尝试了解如何使用可观察序列以及如何从错误中恢复。
我的示例有点做作,但我的实际实现有点过于复杂,无法在此处展示。无论如何,我有someObservable,当用户在 UI 中单击时会发出值。这应该会触发对 API 的请求(GET/POST/etc)。问题是如果 API 返回错误,postData 之后就不会再调用了。
我在这里做了一个例子来说明问题。我发现我可以使用Rx.Observable.of 而不是Rx.Observable.throw 来保持运行。但这会向subscribe 函数发出一个值。在我的实际应用程序中,postData 是一个服务,它被应用程序的多个部分重用,我不确定我是否想在那里使用 of 而不是 throw。
所以我的问题是,你通常如何处理这样的事情?
let someObservable = Rx.Observable.timer(1, 1000);
someObservable
.switchMap(data => {
return postData(data);
})
.catch(error => {
console.log("POST failed");
})
.subscribe(val => console.log("Success: " + val));
function postData(data) {
console.log("Will post " + data);
if (data !== 2) {
return Rx.Observable.of(true);
}
else {
return Rx.Observable.throw(new Error("400 Bad Request or something"));
}
}
【问题讨论】:
-
立即捕获:
return postData(data).catch(...)修改后的 bin:jsbin.com/rujakoguro/3/edit?js,console -
@arturgrzesiak 好的,这似乎有效!你认为你可以写一个答案并简要解释为什么我需要赶上那里而不是像我在我的代码中那样做?
标签: javascript typescript rxjs reactive-programming observable