我真的很头疼,试图在使用for循环时使用异步/等待功能。我正在使用Node.js版本:v8.6.0异步/等待承诺麻烦 - Javascript/Nodejs
简而言之,我试图从数据库中检索许多行,然后将它们全部推送到数组并返回该数组。
我已经成功地完成了这个使用回调,但无法弄清楚如何使用异步/等待。
我当前使用的代码回调,工程
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);
});
}
失败尝试使用的代码异步/ 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和异步/等待教程和例子,这些教程和例子通常适用于我,但是当涉及到循环访问我所遇到问题的数据时。我知道有一些基本的东西我缺少,所以任何帮助表示赞赏。谢谢!
工作太棒了!现在我明白了许多好的承诺。谢谢 – nd510