forEach 中的推送对象在地图查看端为空
Pushed object in forEach is empty at the map look end
我希望从 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;
});
},
};
任何帮助将不胜感激:)
在这里找到了解决方案:
您应该等待 getProductIdWeightPrice
而不是循环本身。循环做了它应该做的事——循环数组,调用一些外部方法。这些方法的作用 - 循环不关心。
为了“暂停”循环,您需要等待异步调用来获取数据。这样做它会起作用:)
我希望从 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;
});
},
};
任何帮助将不胜感激:)
在这里找到了解决方案:
您应该等待 getProductIdWeightPrice
而不是循环本身。循环做了它应该做的事——循环数组,调用一些外部方法。这些方法的作用 - 循环不关心。
为了“暂停”循环,您需要等待异步调用来获取数据。这样做它会起作用:)