async function myfunc(fruits) {
for (i = 0; i < 5; i ) {
fruits.forEach(fruitId => {
colors = await dbHelper.getColor(fruitId);
colors.forEach(color => {
taste = await dbHelper.gettaste(color);
});
});
}
}
我們如何使用多個 for 回圈使其作業。dbhelper 函式正在從資料庫中獲取一些資料。
uj5u.com熱心網友回復:
您的代碼有幾個錯誤(在下面查看),應該如下所示:
async function myfunc(fruits) {
try {
for (let i = 0; i < 5; i ) {
for (let fruitId of fruits) {
colors = await dbHelper.getColor(fruitId);
for (let color of colors) {
taste = await dbHelper.gettaste(color);
}
}
}
} catch(err) {
// Handle somehow
}
}
為什么?
- 您從箭頭函式
dbHelper內部forEach而不是myfunc直接呼叫異步方法,因此await不允許在那里使用async關鍵字,您應該在異步方法呼叫的方法中添加關鍵字。 - 等待在那里不起作用,因為
forEach回圈無法暫停代碼執行。解決方案:將forEach回圈更改為for (... in/of ...). - 您沒有在任何地方處理錯誤。請記住,任何異步方法都可能被拒絕,因此您需要做好準備并以某種方式處理錯誤。解決方案:添加
try/catch.
你也可以檢查這個關于回圈期間異步的問題。
uj5u.com熱心網友回復:
假設你想檢索一系列的味道,你可以做這樣的事情
async function myfunc(fruits) {
const colors = await Promise.all(fruits.map(fruitId =>dbHelper.getColor(fruitId)));
const tastes = await Promise.all(colors.map(color => dbHelper.gettaste(color)));
...
}
或更短
async function myfunc(fruits) {
const colors = await Promise.all(fruits.map(dbHelper.getColor));
const tastes = await Promise.all(colors.map(dbHelper.gettaste));
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/357331.html
標籤:节点.js MongoDB for循环 异步 异步等待
上一篇:按給定順序重新排序串列
