forEach 中的推送对象在地图外观结束时为空 [重复]
Posted
技术标签:
【中文标题】forEach 中的推送对象在地图外观结束时为空 [重复]【英文标题】:Pushed object in forEach is empty at the map look end [duplicate] 【发布时间】:2021-08-18 17:09:15 【问题描述】:我希望从 forEarch 推送对象,在 forEarch 中获取数据后,console.log 会显示正确的值,并且对象已正确推送到数组。
但是在forEach的最后,如果我尝试访问推送的对象,数组里面没有对象
代码如下
async function get_line_items(items)
line_items2 = [];
await items.forEach((element, index) =>
const id = element.id;
if (id)
await getPriceFromCartCheckout(id, (err, results) =>
if (err)
console.log(err);
return;
if (results && !isEmpty(results))
// Add new item
line_items2.push(
name: element.name,
amount: results[0].price,
currency: "eur",
quantity: element.quantity,
)
console.log(line_items2) // => Here objects are properly added to the array on each loop
);
)
console.log(line_items2) // => Here the array is empty.
return line_items2;
const line_items = await get_line_items(req.body[1].items);
console.log( line_items); // => Here the array is empty.
module.exports =
getPriceFromCartCheckout: async (id) =>
return await pool.query(`SELECT volume, price FROM products WHERE id = ?`, [
parseInt(id)
])
.then(iuidtest =>
return iuidtest;
);
,
;
任何帮助将不胜感激:)
在这里找到解决方案:
NodeJS async mysql call to connection pool returns no result
【问题讨论】:
这不是“最后”。您无需等待getProductIdWeight
回调。你应该让这个函数返回一个承诺,这样你就可以干净地等待它。
【参考方案1】:
您应该等待getProductIdWeightPrice
而不是循环本身。循环做了它应该做的事情——循环数组,调用一些外部方法。这些方法的作用 - 循环不在乎。
为了“暂停”循环,您需要等待异步调用以获取数据。这样做,它会工作:)
【讨论】:
我刚刚更新了代码以使用 async/await 和 getPriceFromCartCheckout 但现在它告诉我:await getProductIdWeightPrice(id, (err, results) => ^^^^^ SyntaxError: await is only valid在异步函数中 很好,但现在getPriceFromCartCheckout
正在等待查询。基本上该函数返回的是 db 查询的 result。这个结果不是 Promise(或异步函数调用)。您可以简单地执行以下操作:getPriceFromCartCheckout: async (id) => pool.query(`SELECT volume, price FROM products WHERE id = ?`, [ parseInt(id)])
如果pool.query
返回一个 promise/async 函数,它将起作用。
我将其更新为:pastebin.com/7euj7jX1 但我仍然有同样的错误“等待仅在异步函数中有效”
你需要要么使用short return async (id) => pool.query
(意味着这个函数将返回pool.query的调用),要么在函数体中显式返回:async (id) => return pool.query
。您现在执行一个函数,该函数调用 pool.query,但返回 void。以上是关于forEach 中的推送对象在地图外观结束时为空 [重复]的主要内容,如果未能解决你的问题,请参考以下文章