Действительно, такое поведение может вызвать некоторые проблемы с производительностью, т. Е. Дополнительные переключения контекста между «потоком» вызывающего абонента и «хвостом продолжения» асинхронной функции.
async function f(){
await Promise.resolve("something");
console.log("f: after await");
return "somthing_else";
}
function g(){
const fres = f();
console.log("g: f returns");
fres.then((x) => console.log("finish"));
}
g();
Вывод (по крайней мере, в моем Chrome):
g: f returns
f: after await
finish
Поскольку оператору ожидания фактически нечего ждать, я бы ожидал:
f: after await
g: f returns
finish
Это поведение определяется стандартом или зависит от реализации?
Если это стандартное поведение, в чем причина?