Это потому, что setTimeout
не возвращает обещание await
в вашей функции main
. Сам setTimeout выполняется синхронно. Он добавляет к циклу событий обратный вызов, который передается в качестве аргумента для выполнения в указанное время.
Также в этом коде возврат вашего обратного вызова ничего не значит, так как обратный вызов будет запущен через 1 секунду, а возвращаемое значение никуда не денется.
Ключевое слово
async
говорит о том, что функции возвращают обещание и могут содержать await
код. Так как в вашем коде нет ожидания, он выглядит как
function moveOneStepAsync() {
setTimeout(() => {
return console.log('Hello world!');
}, 1000);
return Promise.resolve();
}
Таким образом, ваш await
в основном будет ожидать один тик цикла событий, чтобы перейти к следующему «шагу»
Читайте о setTimeout, цикле событий и о том, что ожидает, чтобы понять его более подробно