3 回答
TA贡献1865条经验 获得超7个赞
你正在混合async/await和回调。那是行不通的,因为await不会等待回调完成。
如果你想用await语法大致如下(假设数据库包支持promise)
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.forEachwith async/await,因为它不支持异步回调。
TA贡献1827条经验 获得超9个赞
问题是它db.query是异步的,但由于您使用的是回调,因此它不太可能返回 Promises,因此 wait 不会执行您期望的操作。如果你想使用await,你可能需要适配这个API。
const query = sql => new Promise((resolve, reject) => {
db.query(sql, (error, result, fields) => {
if (error) {
return reject(error);
}
resolve(result);
});
});
const result = await query(`SELECT * FROM Pietanza`);
const menu = await Promise.all(result.map(temp => {
//retrieving indicatori (spicy, vegan for example)
const indicatori = await query(`
SELECT indicatore
FROM pietanza_indicatore
WHERE pietanza = '${temp.nome}'
`);
return {
...temp,
indicatori: indicatori.map(ind => ind.indicatore)
};
}));
res.json({ ...pietanze, menu });
添加回答
举报