Angular 10 使用 Await 获取 web 服务状态?
Angular 10 get webservice status with Await?
在用户登录之前,我需要测试WebServce 是否响应然后系统是否在维护中。在 WebService 部分 (core3 .net) 我有 2 个函数:
- return 的心跳:return 好("好");
- MaintenanceInfo return Return OK("No");
我实时显示 2 个测试的结果,如果没有问题,我会显示登录面板。
我需要按顺序进行这些测试,我想用 await 运算符来做。
我得到了一个 TestHelperServie class 和 2 个 return bool 函数。但我找不到如何从 HTTP 订阅函数传递到 bool 结果。如果我得到 OK 响应,则为 true;如果我有超时或另一个失败的 HTTP,则为 false。
现在我这样做:
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);
在用户登录之前,我需要测试WebServce 是否响应然后系统是否在维护中。在 WebService 部分 (core3 .net) 我有 2 个函数:
- return 的心跳:return 好("好");
- MaintenanceInfo return Return OK("No"); 我实时显示 2 个测试的结果,如果没有问题,我会显示登录面板。 我需要按顺序进行这些测试,我想用 await 运算符来做。 我得到了一个 TestHelperServie class 和 2 个 return bool 函数。但我找不到如何从 HTTP 订阅函数传递到 bool 结果。如果我得到 OK 响应,则为 true;如果我有超时或另一个失败的 HTTP,则为 false。 现在我这样做:
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()
return await this.http.get(....).toPromise().then(res=> Response = true).catch(err => Response = false);