await
не является запретом.Если ожидаемая вещь не является обещанием, она завернута в обещание, это обещание ожидается.Поэтому await
меняет порядок выполнения (но вы все равно не должны на него полагаться):
console.log(1);
(async function() {
var x = await 5; // remove await to see 1,3,2
console.log(3);
})();
console.log(2);
Кроме того await
работает не только на instanceof Promise
с, но и на каждом объекте с .then
Метод:
await { then(cb) { /* nowhere */ } };
console.log("will never happen");
Есть ли какой-нибудь заметный эффект ожидания не-Обещания?
Конечно, .then
вызывается, если он существует на ожидаемой вещи.
Есть ли какое-либо различие в поведении, о котором следует знать, чтобы избежать потенциальной ошибки?
Не называйте метод «тогда», если не хотите, чтобы он был обещанием.
Есть ли различия в производительности?
Конечно, если вы ждете чего-то, вы всегда откладываете продолжение на микрозадачу.Но как всегда: вы, вероятно, не заметите этого (как человек, наблюдающий за результатом).