在node js中,数组push不会在循环中更新



push in array in a loop

exports.bulkCartUpdate = async (req, res) => {

let userId = req.params.userId;
let CartId = req.profile.CartId;
let items = req.body;
var promises = [];
for( let i of items )
{
const productId = i.productId;
const quantity = i.quantity;

await Product.findById(productId).exec((err, productdet) => {

let obj = {
productId,
quantity,
price: productdet.price,
name: productdet.name,
stock: productdet.inventory
}
promises.push(obj);
});
console.log(promises);
}
}
上面的代码是从api中获取一些细节,并创建一个对象来推送数组。但它看起来是空的。请帮助我,提前感谢很多

你混合了async - await和回调,试着这样改变你的代码:

exports.bulkCartUpdate = async (req, res) => {
let userId = req.params.userId;
let CartId = req.profile.CartId;
let items = req.body;

var promises = [];
for (let i of items) {
const productId = i.productId;
const quantity = i.quantity;

try {
const product = await Product.findById(productId);
if (product) {
const obj = {
productId,
quantity,
price: product.price,
name: product.name,
stock: product.inventory,
};
promises.push(obj);
}
} catch (err) {
console.log(`Error fetching product with ID ${productId}`);
}
}
console.log(promises);
};  

您可能需要Promise.all()的承诺数组。你需要删除回调并等待,然后将其压入数组。

exports.bulkCartUpdate = async (req, res) => {
let userId = req.params.userId;
let CartId = req.profile.CartId;
let items = req.body;
var promises = [];
for (let i of items) {
const productId = i.productId;
const quantity = i.quantity;
promises.push(Product.findById(productId).lean());
}
Promise.all(promises).then(async (products) => {
// console.log(products);
}).catch(e => console.error(e))
}

这里是参考

最新更新