Я пытаюсь перебрать элементы в базе данных MongoDB и сохранить значения в массиве. Однако после нескольких часов борьбы я не могу этого сделать.
Вот мой код:
//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);
});
}
Не против первого вывода, он предназначен для отображения одного и того же идентификатора дважды. Результат, когда я регистрирую productsArr[]
, всегда является пустым массивом, за исключением того, что я помещаю console.log(productsArr);
внутри цикла forEach()
, чего я не хочу, потому что он регистрируется слишком часто, и яне может отобразить страницу EJS следующим образом.
Функция визуализации будет выглядеть следующим образом:
res.render('shop/cart', {
path: '/cart',
docTitle: 'Cart',
products: productsArr,
userData: userData
});
Я не могу получить products
в productsArr[]
, как толькокогда я пытаюсь получить доступ к productsArr[]
за пределами цикла forEach (), у меня появляется пустой массив, поэтому я не знаю, как это сделать.
Есть ли у вас какие-либосовет?
Заранее спасибо!