gpt4 book ai didi

javascript - 捕获后如何重试?

转载 作者:行者123 更新时间:2023-11-30 11:50:58 25 4
gpt4 key购买 nike

捕获后如何重试?

我想在不调用另一个订阅的情况下自动重试我的 observable after catch 方法。我该怎么做?

我现在有这样的东西:

intercept(observable: Observable<Response>): Observable<Response> {
return observable.catch((err, source) => {
return this.refreshToken()
.flatMap(res => {
if (res.status === 200) {
return observable;
}
return Observable.throw(new Error('Can\'t refresh the token'));
});
});
}

所以当我有我的 observable 并调用 subscribe 时,它会捕获错误 -> refresh token -> 然后返回 observable where我必须调用另一个订阅者。我不想那样做。我怎样才能让它与之前的订阅一起工作?

调用示例看起来像这样:

let request = this.http.request(url);
intercept(request).subscribe(res => { //do something });

最佳答案

有几个运算符可以与 catch 结合使用来处理重试/重复。它们是有用的运算符,它们允许您有条件地重新订阅已终止的可观察对象。来自 retryWhen 的官方文档:

Repeats the source observable sequence on error when the notifier emits a next value. If the source observable errors and the notifier completes, it will complete the source sequence.

此处的附加信息:

您可以从之前的问题中找到一些示例:

来自第二个 SO 问题:

src.retryWhen(function (errors) {
// retry for some errors, end the stream with an error for others
return errors.do(function (e) {
if (!canRetry(e)) {
throw e;
}
});
});

关于javascript - 捕获后如何重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39485795/

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