Javascript 将对象推送到数组中
如果我在forEach()循环中记录我的产品,那么它工作正常,并存储所有产品。但是如果我在循环之外记录我的产品,那么它将打印一个空数组Javascript 将对象推送到数组中,javascript,arrays,push,Javascript,Arrays,Push,如果我在forEach()循环中记录我的产品,那么它工作正常,并存储所有产品。但是如果我在循环之外记录我的产品,那么它将打印一个空数组 var cartProducts=[]; const cart=等待CartModel .findOne({UserDetailsId:userID}) .populate('UserDetailsId'); 如果(购物车){ cart.products.forEach(异步(产品)=>{ const productItem=等待产品模型 .findOne({u
var cartProducts=[];
const cart=等待CartModel
.findOne({UserDetailsId:userID})
.populate('UserDetailsId');
如果(购物车){
cart.products.forEach(异步(产品)=>{
const productItem=等待产品模型
.findOne({u id:product.productDetailsId});
cartProducts.push(productItem);
});
}
console.log(“购物车项目”,购物车产品);
尝试通过以下方式获取所有产品ID:
const productIds = cart.products.map(product => product.productDetailsId);
然后,您可以一次性获取所有产品项,而无需向数据库发送多个请求:
const products = await ProductModel.find({_id: {$in: productIds} });
尝试通过以下方式获取所有产品ID:
const productIds = cart.products.map(product => product.productDetailsId);
然后,您可以一次性获取所有产品项,而无需向数据库发送多个请求:
const products = await ProductModel.find({_id: {$in: productIds} });
要这样做,您需要使forEach异步
if (cart) {
async function asyncForEach(arr) {
const promises = arr.products.forEach(async(product) => {
const productItem = await ProductModel
.findOne({_id: product.productDetailsId });
cartProducts.push(productItem);
});
await Promise.all(promises);
}
asyncForEach(cart);
}
函数mockAsync(param){
返回新承诺((解决、拒绝)=>{
setTimeout(()=>resolve(console.log(param)),2000)
})
}
让购物车=[“A”、“B”、“C”];
异步函数asyncForEach(arr){
日志(“处理…”)
const promises=arr.forEach(异步(产品)=>{
等待mockAsync(产品);
});
等待承诺。所有(承诺)
}
异步foreach(cart)代码>要这样做,需要使forEach异步
if (cart) {
async function asyncForEach(arr) {
const promises = arr.products.forEach(async(product) => {
const productItem = await ProductModel
.findOne({_id: product.productDetailsId });
cartProducts.push(productItem);
});
await Promise.all(promises);
}
asyncForEach(cart);
}
函数mockAsync(param){
返回新承诺((解决、拒绝)=>{
setTimeout(()=>resolve(console.log(param)),2000)
})
}
让购物车=[“A”、“B”、“C”];
异步函数asyncForEach(arr){
日志(“处理…”)
const promises=arr.forEach(异步(产品)=>{
等待mockAsync(产品);
});
等待承诺。所有(承诺)
}
异步foreach(cart)代码>对异步
循环使用本机for循环。它可能打印一个空数组,因为您正在将对象异步推送到数组中,因此过早地将其记录到控制台?您可以在异步迭代中登录,并保留最后的console.log调用来检查这一点。对于async
循环使用本机for循环。它可能打印一个空数组,因为您正在将对象异步推送到数组中,因此登录到控制台太早?您可以在异步迭代中登录,并保留最后的console.log调用来检查这一点。