尝试基于nodejs中的另一个集合对象从集合中获取对象
router.get('/shopping-cart', isLoggedIn, function (req, res, next) {
qryFilter = { "user_id": req.user._id };
cart.find(qryFilter, function (err, cart) {
var productcart = [];
console.log("cart:"+cart);
for (i = 0; i < cart.length; i++) {
// console.log(cart[i].id);
Product.find({ "_id": cart[i].id }, function (err, product) {
productcart = product;
// console.log('Documents: ' + productcart);
});
}
res.render('shop/shopping-cart', {
layout: 'eshop/blank',
usercart: cart,
productcart: productcart,
});
});
});
产品ID取决于购物车的内容,并且通过for循环我可以获取它,但不能在响应后使用usinf进行循环关闭。渲染请指导我进行操作
答案 0 :(得分:0)
数据库调用是异步的,而for循环在nodejs中是同步的。使用承诺来致电每个产品。
router.get('/shopping-cart', isLoggedIn, function (req, res, next) {
qryFilter = { "user_id": req.user._id };
cart.find(qryFilter, function (err, cart) {
var productcart = [];
var promises = [];
for (i = 0; i < cart.length; i++) {
// console.log(cart[i].id);
promises.push(Promise.resolve(Product.find({ "_id": cart[i].id }).lean().exec().then(function (product) {
productcart.push(product);
}));
}
Promise.all(promises).then(function() {
res.render('shop/shopping-cart', {
layout: 'eshop/blank',
usercart: cart,
productcart: productcart,
});
})
})
})