【发布时间】:2020-06-08 06:37:06
【问题描述】:
我有 组件 A,它具有 异步方法 abc()。在此方法中,我正在等待 service X 中的另一个 async 方法 xyz()。在这个 xyz() 方法中,我有另一个等待调用(我需要按顺序执行调用并在下一个请求中使用响应)。如果在两个特定调用中出现负面结果,我可能会将用户重定向到两个页面之一(目前假设这只是一个页面)。我正在使用router.navigate(['/error']),但它没有像我预期的那样工作......我希望它会停止进一步执行代码并立即执行重定向。
x.service.ts
async ngOnInit() {
await this.abc();
}
async abc(): Promise<any> {
await this.serviceX.xyz();
// below calls are still executed even if we entered the navigation line in xyz() method
await this.service3.magicMethod();
await this.service4.anotherMethod();
}
a.component.ts
async xyz(): Promise<any> {
const result = await this.service1.getData(); //
if (result !== 'OK') {
this.router.navigate(['/error']);
}
const userAnswer = await this.service2.userSelection();
if (userAnswer !== 'OK') {
this.router.navigate(['/error']);
}
}
service1 和 service2 都具有异步功能,我正在等待使用 toPromise() 的 HTTP 响应。类似的东西:
async getData(): Promise<SomeResponse> { // or userSelection()
const response = await this.wrapperService.getHttpResponse().toPromise();
console.log(response);
return response as SomeResponse;
}
【问题讨论】:
-
你能解释一下“不工作”是什么意思
-
您确定结果不是“OK”并且从未输入条件句?
-
@KurtHamilton,我已经用这句话更新了我的帖子 - “我希望它会停止进一步执行代码并立即执行重定向。”这不会发生,因为正如我在代码的注释部分中提到的那样。
-
@AdamDunkerley 是的,我在这里发帖之前检查过:)
标签: angular typescript async-await routes