javascript - 为什么我第一次使用异步它会给我一个空数组?
问题描述
我正在使用 Node.js 在 JS 中制作应用程序。我正在尝试使用异步/等待功能。
当我执行下面的代码时,第一次发出 get 请求时,它给了我一个空数组,如果我发出第二次 get 请求,它给了我完整的数组。为什么会这样?
var sql = `SELECT * FROM Pietanza`;
await db.query(sql, (error, result, fields)=>{
if(error){
throw error;
}
//console.log(JSON.stringify(result));
result.forEach(j => {
var temp = j;
//retrieving indicatori (spicy, vegan for example)
sql = `SELECT indicatore FROM pietanza_indicatore WHERE pietanza = '${temp.nome}'`;
db.query(sql, (error, result, fields)=>{
if(error) throw error;
temp.indicatori = new Array();
result.forEach(ind => {
temp.indicatori.push(ind.indicatore);
//console.log(temp);
});
});
pietanze.menu.push(temp);
});
//console.log(pietanze);
});
//sends the JSON menu
//console.log(pietanze);
res.json(pietanze);
});```
Thank you in advance.
解决方案
您正在混合async/await
和回调。那是行不通的,因为await
不会等待回调完成。
如果你想用await
语法大致如下(假设数据库包支持promises)
try {
let outerresult = await db.query(outersql);
...
for (let row of outerresult) {
...
let innerresult = await db.query(innersql);
...
}
} catch (error) {
// Do the error handling
}
你也不能使用Array.forEach
withasync/await
因为它不支持异步回调。