Angular 10 使用 Await 获取 web 服务状态?

Angular 10 get webservice status with Await?

在用户登录之前,我需要测试WebServce 是否响应然后系统是否在维护中。在 WebService 部分 (core3 .net) 我有 2 个函数:

async TestHeartBeat()
{
      let Response:Boolean = false;

      const headers = new HttpHeaders()
            .set('Content-Type','application/json');
      
      const options = {
        headers: headers,
        observe: "response" as const,
        responseType: "json" as const
      };

      await this.http.get(`${environment.apiUrl}/TestController/HeartBeat`, options)
      .subscribe(res=>{
        Response = true;
      },
      error=>{
        Response = false;
      })
      return Respone;
}

但是函数不等待http响应。 我怎样才能解决这个问题? 抱歉我的新手问题,但我来自 c# 世界,我们经常使用 await/async。我不认为我可以在 angular 10.

中以同样的方式做到这一点

使用 rxjs 管道、映射和 catchError。

async TestHeartBeat()
{
      const headers = new HttpHeaders()
            .set('Content-Type','application/json');
      
      const options = {
        headers: headers,
        observe: "response" as const,
        responseType: "json" as const
      };

      return await this.http.get(`${environment.apiUrl}/TestController/HeartBeat`, options)
        .pipe(
           map(res => true),
           catchError(error => false)
        ).toPromise();
}

现在你可以这样调用它了:

if (await TestHeartBeat()) {
   // Display your panel
} else {
   // Service is in maintenance
}

您不能在 Observables 上等待,您必须使用 toPromise()

将其转换为 promise
return await this.http.get(....).toPromise().then(res=> Response = true).catch(err => Response = false);