У меня есть приложение, в котором мне нужно ждать каждого ответа HTTP. Таким образом, вызовы должны выполняться в определенном порядке c, а некоторые из них требуют ответа другой службы. Я думал, что можно будет отловить ошибку в одном месте - метод root / main, где будет распространяться ошибка. Но, похоже, так не работает ... Возможно ли это? Или это означает, что мне нужно использовать блок try / catch в каждом методе, где я использую await
?? Давайте предположим, что этот псевдокод:
user.wrapper.service.ts
// Class which wraps real UserService with HTTP calls
export class UserWrapperService {
async getUserById(id: number): Promise<UserResponse> {
return await this.userService.getUser(id).toPromise() as UserResponse;
}
async getUserDetails(userName: string): Promise<UserDetailsResponse> {
return await this.userService.getUserDetails(userName).toPromise() as UserDetailsResponse;
}
}
main-component.ts
export class MainComponent implements OnInit {
async ngOnInit() {
try {
await this.retrieveDetailsForEachUser();
} catch (e) {
this.router.navigate(['/error']);
}
}
private async retrieveDetailsForEachUser(): Promise<any> {
for (let counter = 0; counter < 10; counter++) {
const user = await this.userWrapperService.getUserById(counter);
console.log(user);
const details = await this.userWrapperService.getUserDetails(user.name);
// use this details in another service with bigger method, where is present more async/await
}
}
}
Я надеялся, что если что-то будет go неправильно в методах UserWrapperService
ошибка будет распространена и перехвачена в MainComponent
. Или, по крайней мере, этого можно достичь. Но, похоже, мне нужно выдать исключение и попробовать / перехватить все async
методы, которые для чего-то await
. Я прав? Есть ли какой-нибудь более красивый способ сделать это? 1014 *