MongoDB在for循环中find一个错误

function ParseOrderSchema(CartItems , callback) { var lookup = 0; var subOrderList = new Array(); for(var i=0;i<CartItems.length;i++) { Meal.findOne({ _id: CartItems[i].id }).lean().exec(function (err, meal) { console.log(CartItems[i]); //meal.mealQTY = CartItems[i].qty; var s = new subOrder({ meals: meal, deliveryDate: getMomentDate(0) }); subOrderList.push(s); if (++lookup == CartItems.length) callback(subOrderList); }); } } 

CartItem[i].id它工作正常,能够正常工作。 但是在这一行中失败了meal.mealQTY = CartItems[i].qty;

它无法识别findOne()方法内的CartItems[i]

由于findOne是asynchronous的, i将始终在callback中的CartItems.length作为for循环运行到任何findOnecallback发生之前完成。

您可以通过使用forEach迭代CartItems来解决此问题,以便每个迭代的元素都被捕获到一个本地函数参数中:

 function ParseOrderSchema(CartItems, callback) { var lookup = 0; var subOrderList = new Array(); CartItems.forEach(function(cartItem) { Meal.findOne({ _id: cartItem.id }).lean().exec(function (err, meal) { console.log(cartItem); meal.mealQTY = cartItem.qty; var s = new subOrder({ meals: meal, deliveryDate: getMomentDate(0) }); subOrderList.push(s); if (++lookup == CartItems.length) callback(subOrderList); }); }); }