3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
你正在混合async/await和回調(diào)。那是行不通的,因?yàn)閍wait不會(huì)等待回調(diào)完成。
如果你想用await語(yǔ)法大致如下(假設(shè)數(shù)據(jù)庫(kù)包支持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,因?yàn)樗恢С之惒交卣{(diào)。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
問(wèn)題是它db.query是異步的,但由于您使用的是回調(diào),因此它不太可能返回 Promises,因此 wait 不會(huì)執(zhí)行您期望的操作。如果你想使用await,你可能需要適配這個(gè)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 });

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是由于您發(fā)出的異步請(qǐng)求的性質(zhì)所致。異步請(qǐng)求將在它們可以運(yùn)行時(shí)運(yùn)行,因此您需要等待它們返回它們的值,然后才能使用它們(例如循環(huán)它們并顯示它們)
添加回答
舉報(bào)