Это ожидаемое поведение программирования в асинхронном стиле.
В этом методе:
async method(): Promise<void> {
console.log('in start async');
await this.someotherMethod();
console.log('in finish async');
}
Второй оператор журнала не может быть выполнен в том же тике, что и первый, из-заожидание вызова в середине.По сути, он компилируется примерно так:
async method(): Promise<void> {
console.log('in start async');
this.someotherMethod().then(result => {
console.log('in finish async');
})
}
, который, как вы можете видеть, вызывает второй оператор журнала только после разрешения someotherMethod
.
Второй вариант, однако,не преобразован вообще из-за правил асинхронного ожидания.Несмотря на то, что событие someotherMethod
возвращает обещание, это обещание просто игнорируется и выпадает из области видимости.
Эти правила не имеют ничего общего с Typescript и напрямую связаны со средой выполнения JavaScript и спецификацией ECMA.