Ну, это не работает:
async function test() {
console.log("before");
await setTimeout(() => {
console.log("callback");
}, 1000);
console.log("after");
}
test();
Вы получите before
- after
- callback
.await
ничего не останавливает, потому что - как вы узнали - setTimeout
не возвращает обещание.Он ожидает undefined
и продолжает выполнение следующего оператора.Вашему примеру просто не хватало этого следующего утверждения, поэтому вы не могли увидеть разницу.Вот рабочий пример:
function delay(t) {
return new Promise(resolve => setTimeout(resolve, t));
}
async function test() {
console.log("before");
await delay(1000);
console.log("after");
}
test();