我试图遍历MongoDB数据库中的元素并将值保存到Array中。 但是,经过数小时的奋斗,我无法完成任务。
这是我的代码:
//shopController.js
const Product = require('../models/product');
const User = require('../models/user');
exports.getcart = (req,res,next) => {
const productIds = [];
const productsArr = [];
let userData = null;
User.findById(req.user._id)
.then(user => {
userData = user;
userData.cart.items.map(prodId => {
productIds.push(prodId.productId);
})
console.log(productIds); // [ 5dc1b6ace13a97588620d6c6,5dc1b6ace13a97588620d6c6 ]
return productIds;
})
.then(prodIds => {
prodIds.forEach(prodId => {
Product.findById(prodId)
.then(product => {
productsArr.push(product);
})
.catch(err => console.log(err))
})
console.log(productsArr); // []
})
.catch((err) => {
const error = new Error(err);
error.httpStatusCode = 500;
return next(error);
});
}
不要介意第一个输出,它打算两次显示相同的ID。
我记录productsArr[]
时的结果始终是一个空数组,除了我将console.log(productsArr);
放在里面的{strong} forEach()
循环之外,这是我不想要的,因为它被记录得太多了,我无法呈现这样的EJS页面。
render函数如下所示:
res.render('shop/cart',{
path: '/cart',docTitle: 'Cart',products: productsArr,userData: userData
});
一旦我尝试访问forEach()循环的products
外部,我就无法将productsArr[]
放入productsArr[]
有一个空数组,所以我不知道该怎么做。
您有什么建议吗?
谢谢!