【发布时间】:2018-03-24 17:09:37
【问题描述】:
在使用 for 循环时尝试使用 async/await 功能时,我真的很头疼。我正在使用 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);
});
}
我用谷歌搜索试图找到一个解决方案,我尝试使用多个承诺,然后在最后调用return Promise.all(promises);,但它没有用。我试过return new Promise((resolve, reject)=>resolve(dates))};。我查看了 Promise 和 async/await 教程和示例,这些教程和示例通常对我有用,但是当涉及到循环数据时,我遇到了问题。我知道我缺少一些基本的东西,因此感谢您提供任何帮助。谢谢!
【问题讨论】:
标签: javascript node.js promise async-await ecmascript-2017