在Angular中定期调用运行状况检查API
我是angular的新手,正在尝试建立一个健康检查连接来检查我的后端im背景的可用性。该检查将每隔5s定期运行,以检查是否收到200 OK状态: 这是我的服务:在Angular中定期调用运行状况检查API,angular,Angular,我是angular的新手,正在尝试建立一个健康检查连接来检查我的后端im背景的可用性。该检查将每隔5s定期运行,以检查是否收到200 OK状态: 这是我的服务: healthCheck() { return this.http.get<any>(this.healthCheckAPI, { observe: 'response' }) .pipe( map((resp: any) => { if(resp.status !
healthCheck() {
return this.http.get<any>(this.healthCheckAPI, { observe: 'response' })
.pipe(
map((resp: any) => {
if(resp.status !== 200){
throw resp;
}
return resp.status;
}),
repeatWhen(() => interval(5000)),
retryWhen(errors => errors.pipe(delay(5000)))
);
}
在我的组件中的
subscribe()
方法中,当healthCheck成功时,我成功地获得了状态200,但是为什么我的subscribe方法中从未获得错误部分,即使后端不可用?我想在这种情况下,服务将在后台调用retryWhen()
,并将错误返回到组件,以便我可以在那里进行一些操作,或者我是否遗漏了什么?操作员retryWhen
和重试将不发出错误通知。它将再次触发observable并等待下一个通知
如果您希望对组件中的错误通知执行某些操作,并且仍然使用retryWhen
操作符,则可以在订阅之前将订阅回调移动到点击
操作符
服务
healthCheck(){
返回this.http.get(this.healthCheckAPI,{observe:'response'}).pipe(
映射(响应:任意)=>{
如果(各自状态!==200){
投掷resp;
}
返回相应状态;
}),
重复时间(()=>间隔(5000))
);
}
组成部分
this.apiService.healthCheck()管道(
水龙头(
(数据)=>{
//返回200时执行一些操作
},
(错误)=>{
//返回错误时执行一些操作
}
),
retryWhen(errors=>errors.pipe(延迟(5000)))
).subscribe();
但是请注意,这种方法存在多个问题
- 人们通常不赞成依靠
tap
操作员
retryWhen
现在处于组件级别。因此,每个订阅都应该单独使用管道来重试请求
您可以使用interval()
每隔5秒执行一次检查
可能是这样的:
interval(5000)
.pipe(switchMap(this.apiService.healthCheck()))
.subscribe((success) => {console.log('up')}, error => console.err('down'))
interval(5000)
.pipe(switchMap(this.apiService.healthCheck()))
.subscribe((success) => {console.log('up')}, error => console.err('down'))