angular - 有没有办法通过使用 rxjs 运算符重试来获取角度的 HTTP 状态代码?
问题描述
getRequest(url : string,retryCount = 2) {
return new Observable(response => {
return this.http.get<any>(url)
.pipe(
retryWhen((error) => {
return error.pipe(
concatMap((e, i) => {
if (i >= retryCount) {
return throwError({ ...e, retryCount });
}
return of(e).pipe(delay(2000));
})
);
})
)
.subscribe(data => {
response.next(data);
}, (err: HttpErrorResponse) => {
response.next() //expected 404 ,500 and so on
});
});
}
getRequest(https://jsonplaceholder.typicode.com/postss).subscribe((data: any) => {
console.log(data);
});
上面的代码必须在错误时返回错误代码。上面的 url 不存在,必须在 2 次重试时获得 404。需要进行哪些更改才能获得这些错误代码?
解决方案
您可以像这样在 retryWhen 运算符中检索状态代码:
getRequest(url: string, retryCount = 2) {
return this.http.get(url).pipe(
retryWhen(errors => errors.pipe(
mergeMap((error, i) => i < retryCount ? timer(2000) : throwError(error)
)
))
);
}
getRequest('api').subscribe(
() => { }, // success
error => console.log(error.status)
);
在上面的代码中,在retryWhen
运算符中,我们捕获了错误,并像您正在做的那样以 2 秒的延迟重试请求 2 次。
然后,我们抛出错误并在订阅调用的错误函数中处理它。
我们可以通过status
从传入的错误中检索属性来获取状态。
我希望我回答了你的问题:)
推荐阅读
- java - Hibernate 无法处理不同模式中具有相同名称的序列
- java - Quarkus:具有通用返回类型的 Rest 客户端
- jquery - JQuery 使用不可见的 Google Captcha 验证多个表单
- c# - 将 Canon EDSDK 错误代码翻译成错误信息
- bash - 带有 bash 的 Yaml:在字符串中转义引号
- sql - 在sql server中按组填充序列
- sql - Laravel Query Builder 中的第一个字母如何计算?
- c++ - std::strlen 如何在内部工作?
- haskell - 在 Haskell 中制作二叉树的问题
- c# - C# SIMD 向量
未正确初始化