Я хочу преобразовать цепочку обещаний в async / await, но Typescript жалуется на типизацию.
TS2322: Тип IHttpPromiseCallbackArg ‹IResp> не может быть назначен типу IResp ...
Я думал, что await
вернет обычное значение, а не обещание. Я ошибся? Если да, то как я могу назначить типизацию, чтобы нужный код компилировался?
Я думал, что await вернет то же значение, что и первый аргумент в обратном вызове .then. Я ошибся?
Старый код:
handleSubmit(form) {
const params = this.getParams(form);
this.myAsyncRequest(params)
.then((resp:IResp) => this.processResp(resp))
.catch((e:IServerError) => this.handleError(e));
}
Желаемый новый код:
async handleSubmit(form) {
const params = this.getParams(form);
try {
const resp:IResp = await this.myAsyncRequest(params); //typing error with "const resp:IResp"
this.processResp(resp);
} catch (e:IServerError) {
this.handleError(e);
}
}
Желаемый код все равно не работает, если я удалю тип возврата в myAsyncRequest
; Я предполагаю, что Typescript выводит непосредственно из библиотеки AngularJS.
myAsyncRequest(params:IParams):IHttpPromise<IResp> {
return $http.post('blah', data);
}
Если я удалю "IResp" из объявления const resp, processResponse сообщит, что IHttp ‹IResp> не равно IResp ...
processResp(resp:IResp) {
//do stuff
}
await
вернет то же значение, что и первый аргумент в обратном вызове.then
. Я ошибся? - person user2954463   schedule 17.10.2017