Node.js async/await не ждет внутри цикла при вызове запросов к базе данныхJavascript

Форум по Javascript
Ответить
Anonymous
 Node.js async/await не ждет внутри цикла при вызове запросов к базе данных

Сообщение Anonymous »

Я работаю над Node.js + Express API и столкнулся с проблемой, когда async/await ведет себя внутри цикла не так, как я ожидал.
У меня есть маршрут, который извлекает список пользователей, а затем для каждого пользователя извлекает их заказы из базы данных. Я хочу, чтобы все запросы завершались до отправки ответа, но ответ отправляется до того, как будут прикреплены все заказы.
Вот упрощенная версия моего кода:

Код: Выделить всё

app.get("/users-with-orders", async (req, res) => {
try {
const users = await getUsers(); // returns array of users

users.forEach(async (user) => {
const orders = await getOrdersByUserId(user.id);
user.orders = orders;
});

res.json(users);
} catch (err) {
res.status(500).json({ error: "Something went wrong" });
}
});

Код: Выделить всё

getUsers()
и getOrdersByUserId() возвращают Promises и работают правильно сами по себе.
Проблема в том, что user.orders иногда отсутствует или пуст в ответе, из-за чего создается впечатление, что await внутри цикла не ждет.
Я думал, что использование await обеспечит завершение каждого запроса перед отправкой ответа, но это не похоже на случай.
Как правильно обрабатывать несколько асинхронных операций в цикле, чтобы все данные были полностью загружены перед отправкой ответа?

Подробнее здесь: https://stackoverflow.com/questions/798 ... se-queries
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»