在Angular中定期调用运行状况检查API

在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 !

我是angular的新手,正在尝试建立一个健康检查连接来检查我的后端im背景的可用性。该检查将每隔5s定期运行,以检查是否收到200 OK状态:

这是我的服务:

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'))