作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试了解如何使用可观察序列以及如何从错误中恢复。
我的示例有点做作,但我的实际实现有点太复杂,无法在此处展示。无论如何,我有 someObservable
,它会在用户点击 UI 时发出值。这应该会触发对 API 的请求(GET/POST/等)。问题在于,如果 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"));
}
}
最佳答案
如果您想再次发送请求,您可能需要查看 retry
和 retryWhen
而不是 catch
。
catch
将使用返回的 Observable
作为新的“源”。 See this bin for an example.
retry(When)
将根据您传递给运算符(operator)的配置,在发生错误时“重新订阅”。您可以在此处找到示例和更多信息:https://www.learnrxjs.io/operators/error_handling/retrywhen.html
关于javascript - 如何从 rxjs 中的错误中恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42642966/
我是一名优秀的程序员,十分优秀!