gpt4 book ai didi

javascript - 如何从 rxjs 中的错误中恢复?

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:01 25 4
gpt4 key购买 nike

我正在尝试了解如何使用可观察序列以及如何从错误中恢复。

我的示例有点做作,但我的实际实现有点太复杂,无法在此处展示。无论如何,我有 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"));
}
}

http://jsbin.com/naroyeyive/3/edit?js,console

最佳答案

如果您想再次发送请求,您可能需要查看 retryretryWhen 而不是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com