Async await изнутри — как устроено?
async/await лишь удобная обертка над промисами. Подробней о async/await  можете почитать  тут.
1000 выводится раньше потому, что функция, благодаря использованию ключевого слова await, дожидается ответа от Promise возвращаемого функцией sleep и только после этого продолжает выполнение.
В V8 async/await так же как и Promise реализованы на JavaScript. С реализацией можно ознакомиться тут.
Как можно видеть реализована она на генераторах.
Аналог вашего примера без использования async/await:const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

(() => {
    setTimeout(() => console.log('1000'), 1000);
    sleep(5000).then(() => {
      console.log('5');
    });
})();
Так же async function всегда возвращает Promise, даже если вы ничего не возвращаете.
async/await лишь удобная обертка над промисами. Подробней о async/await  можете почитать  тут.
1000 выводится раньше потому, что функция, благодаря использованию ключевого слова await, дожидается ответа от Promise возвращаемого функцией sleep и только после этого продолжает выполнение.
В V8 async/await так же как и Promise реализованы на JavaScript. С реализацией можно ознакомиться тут.
Как можно видеть реализована она на генераторах.
Аналог вашего примера без использования async/await:const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

(() => {
    setTimeout(() => console.log('1000'), 1000);
    sleep(5000).then(() => {
      console.log('5');
    });
})();
Так же async function всегда возвращает Promise, даже если вы ничего не возвращаете.