let test = [];
myarray.forEach((obj) => {
db.query('select * from table', (err, res) => {
// can't use return res.send here bcoz its in foreach loop
test.push(res);
});
});
return res.send(test);
Output :
[ ]
"DATA"
Получение пустого массива сначала, но получение данных во второй раз.
это просто для объяснения моего кода, спасибо за ваше время, пожалуйста, помогите
Не стоит «объяснять» свой код явными ошибками, это только мешает понять вашу проблему. Еще раз: См. ответы здесь, в них описано, что не так и как это исправить. (Указывая вам на существующие ответы, которые решают проблему, помогающую является. :-))
большое спасибо :) я все еще читаю асинхронный
Это потому, что вы извлекаете данные, а не ждете их.
Вот как выполняется ваш код:
Цель состоит в том, чтобы перебрать каждый элемент в вашем массиве, отправить запросы, дождаться всех ответов, а затем продолжить отправку вашего ответа. Лучше всего это достигается с помощью promises и async/await. Подробнее здесь.
Вот как бы я это решил.
async function runQueries() {
// Configure array to store all promises
const promises = []
// Iterate through each item (this probably takes 0.001 seconds)
myarray.forEach(obj => {
// Run the query and store the ongoing request in the promises array
promises.push(new Promise((resolve, reject) => {
db.query('select * from table', (err, res) => {
if (err) {
// If there was an error, send it to reject which will be caught in the try/catch
return reject(err)
}
// Return the success response
resolve(res)
})
}))
})
// try/catch to handle any issues.
try {
// wait for all ongoing requests to finish and return either a response or error
const result = await Promise.all(promises)
// Return the result
res.send(result)
} catch (err) {
console.log(err)
// Send any error instead
res.status(500).send(err)
}
}
РЕДАКТИРОВАТЬ 1:
Это не проверено, это просто для того, чтобы объяснить мой подход к этому типу проблем.
Обновлено еще раз:
Опечатка и завернутая в асинхронную функцию
ты спасаешь жизнь большое спасибо за твои усилия я очень ценю
Помимо явных опечаток (
Array
— это встроенная функция, поэтому, надеюсь, ваша переменная массива не имеет такого имени, и этоforEach
, а неforeach
), это, вероятно, Эта проблема. Пожалуйста, смотрите ответы там.