У меня действительно заболела голова, пытаясь использовать функцию async / await при использовании циклов for. Я использую версию Node.js: v8.6.0
Короче говоря, я пытаюсь получить много строк из базы данных, а затем поместить их все в массив и вернуть этот массив.
Я успешно сделал это с помощью обратных вызовов, но не могу понять, как это сделать с помощью async / await.
Мой текущий код, использующий обратные вызовы, работает
function main(db) {
gatherDates(db, function(dates) {
console.log(dates); //successful
});
}
function gatherDates(db, callback) {
const dates = [];
let today = getToday();
dates.push(today);
let dateQuery = "SELECT date FROM event_dates";
db.query(dateQuery, (err, newDates) => {
for(let row of newDates) {
dates.push(row.date);
}
callback(dates);
});
}
Код, который не пытается использовать async / await
async function main(db) {
let dates = await gatherDates(db);
console.log(dates); //undefined or not all of the data
}
function gatherDates(db) {
const dates = [];
let today = getToday();
dates.push(today);
let dateQuery = "SELECT date FROM event_dates";
db.query(dateQuery, (err, newDates) => {
for(let row of newDates) {
dates.push(row.date);
}
return Promise.resolve(dates);
});
}
Я искал в Google, пытаясь найти решение, я попытался использовать несколько обещаний, а затем вызвать return Promise.all(promises);
в конце, но это не сработало. Я пробовал return new Promise((resolve, reject)=>resolve(dates))};
. Я просмотрел учебные пособия и примеры Promise и async / await, которые обычно работают для меня, но когда дело доходит до циклического перебора данных, именно здесь у меня возникает проблема. Я знаю, что мне не хватает чего-то важного, поэтому любая помощь приветствуется. Спасибо!