Порядок выполнения async-await и then

Использую express для запуска сервера и подключаю mongodb с помощью mongoose. Согласно документации mongoose можно подключить двумя способами:

1 способ:

console.log("Start app");

mongoose.connect('mongodb://127.0.0.1:27017/test')
  .then(() => console.log('Connected to mongodb.'))  
  .catch(error => handleError(error));

const app = express();
app.listen(3000, () => {
    console.log("Server started on port 3000. Url: http://localhost:3000!");
});

В этом случае консоль выдаст, что сначала запускается сервер, а потом происходит подключение к mongodb:

Start app 
Server started on port 3000. Url: http://localhost:3000!
Connected to mongodb.

2 способ:

console.log("Start app");

try {
    await mongoose.connect('mongodb://127.0.0.1:27017/test');
    console.log('Connected to mongodb.');
} catch (error) {
    handleError(error);
}

const app = express();
app.listen(3000, () => {
    console.log("Server started on port 3000. Url: http://localhost:3000!");
});

А в этом сначала будет подключение к бд, а потом запуск сервера.

Start app
Connected to mongodb.
Server started on port 3000. Url: http://localhost:3000!  

Пытаюсь понять принципиальную разницу между async-await и .then и вроде бы везде пишут, что async-await служит лишь обёрткой, а внутри тоже самое, что и у .then, но судя по выводу консоли последовательность выполнения в приложении разная. Помогите разобраться, почему так происходит?


Ответы (1 шт):

Автор решения: Алексей Шиманский

Суть у этих конструкций примерно одна: дождаться результата и потом что-то...

Однако await заставит интерпретатор JavaScript ждать до тех пор, пока промис справа от await не выполнится. Только после этого вернёт его результат, и выполнение кода продолжится. Т.е., упрощённо, код вниз не пойдёт, пока не закончится действие. Даже если придётся 100 лет ждать.

В случае с then такого нет. Он не останавливает выполнение кода, расположенного ниже. Он всего лишь гарантирует выполнение какого-то действия после того, как промис выполнится.

→ Ссылка