Когда асинхронная функция возвращает значение, обещание разрешается, если функция содержит ошибку, обещание отклоняется только для чистоты, возвращая res.json (data), чтобы разрешить функцию.

от вопрос уже есть ответ здесь:

Будет асинхронно / ожидать блокировать поток node.js 5 ответовВ JavaScript блокирует ли использование `await` внутри цикла? 4 ответа

я читалНе блокируйте цикл событий из руководства Node.js. Была строка, говорящая:

Вы должны убедиться, что вы никогда не блокируете цикл событий. Другими словами, каждый из ваших обратных вызовов JavaScript должен завершаться быстро. Это, конечно, относится и к вашемуawaitх, твойPromise.thenи так далее.

Я начал задаваться вопросом, а что, если какой-то API вызовет базу данных, которую яawaitЭто занимает некоторое время, означает ли это, что я заблокировал цикл обработки событий с этимawait вызов?

После этого я начал тестировать некоторые самостоятельно написанные коды, но после тестирования мне все еще не ясно, как блокировать черезawait работает. Вот некоторые тестовые коды:

Предполагая, что я использую экспресс для тестирования. Я понимаю, почему 2 вызова API для/test В этом случае маршрут блокирует цикл обработки событий.

function someHeavyWork() {
  // like calling pbkdf2 function
}

app.get('/test', (req, res) => {
  someHeavyWork();
  res.json(data);
});

Но этого не происходит в этом случае.

function fakeDBCall() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(data);
    }, 5000)
  })
}

app.get('/test', async (req, res) => {
  const data = await fakeDbCall();
  res.json(data);
})

Это может быть из-за моего непонимания того, как блокировка работает в случаеasync/await.

Ответы на вопрос(1)

Ваш ответ на вопрос