angular - rxjs超时操作符可以触发函数而不是返回错误并取消http调用吗
问题描述
我正在实现一个角度拦截器服务,它会查找错误并显示一个快餐栏,现在我正在尝试添加功能来处理“无互联网”或“慢速互联网”。我尝试使用超时运算符,但在超时后,HTTP 调用被取消,但我的要求是通知用户他们的互联网速度很慢,然后可能会在一段时间后取消,所以我需要超时运算符来触发一个函数而不是触发一个错误
这是我的代码
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${this.user.getToken()}`
}
});
return next.handle(request).timeout(8000)
catchError((error) => {
console.log(error)
console.log(error.name)
if(error.name == 'TimeoutError'){
this.alert.snack('Your Internet seems to be very slow','OK',4000)
this.alert.showSlowInternet()
}
else if(error.error.detail === "Given token not valid for any token type"){
this.global.refresh(this.router.url)
}
else if(error.error.detail === "No Connectivity"){
this.alert.dismissableSnack('No Connectivity detected','DISMISS',)
}
else if(error.error.detail){
this.alert.snack(error.error.detail,'OK')
}
else{
this.alert.snack('Server not responding','OK')
}
return throwError(error);
})
}
解决方案
推荐阅读
- php - 按表单数据对出版物进行排序。查询数据库时出错 (RedBeanPHP)
- python - 确定一个点在哪个多边形中,然后将该多边形的名称作为一个新列应用到一个大熊猫数据框
- c - 告诉我为什么使用“max,min,sum=arr[0];” 这段代码
- asp.net-core - 多个 Azure AD 身份验证身份服务器 4
- android - 信标欺骗
- c - 优化字符串散列时奇怪的汇编输出
- sql - ORACLE - 物化视图
- redis - 无法连接到 Redis;嵌套异常是 io.lettuce.core.RedisConnectionException 使用 ReactiveRedisTemplate
- xml - 用一个最深的循环限制递归并为所有元素分配准确的 id
- c - 如何使用此方法将 C 宏扩展为结构和函数