【发布时间】:2019-05-01 07:58:33
【问题描述】:
我在 angular7 Route Guards 服务中使用 httpclient 时遇到问题。 因为我必须从后台服务器获取结果来判断是否通过。 但是httpclient服务是异步的,所以变量canPass总是为假,怎么处理呢? 任何意见将不胜感激。 这是我的代码:
judgePass(route: string): Observable<CommonResult> {
const url = `${this.baseUrl}/check`;
const formData = new FormData();
formData.append('url', route);
return this.httpClient.post<CommonResult>(url, formData, {});
}
canPass: boolean = false;
canActivate(route: ActivatedRouteSnapshot, state:
RouterStateSnapshot):boolean {
this.authService.judgePass(state.url).subscribe(res => {
let code = res['code'];
if (code == 0) {
this.canPass = true;
} else {
this.message.create('error', res.message);
this.canPass = false;
}
});
return this.canPass;
}
【问题讨论】:
-
只需在
if else块内返回this.canPass -
thx,但是函数 canActivate 必须有一个布尔变量才能返回
-
不行,订阅会在main函数返回后执行。您不能从订阅中返回!它会破坏订阅的优势。
标签: angular typescript rxjs