无法将从 mongoDB 获取的对象添加到普通 javascript 数组

Unable to add object fetched from mongoDB to normal javascript array

我正在尝试创建一个添加到购物车按钮,该按钮使用我选择的特定产品的 ID 从产品数据库中获取数据。我试图将使用相同 Id 找到的对象推入普通 javascript 数组,然后使用 ejs 方法显示它。当我正在尝试时,我发现我无法以对象形式推送数据。

总结:

在第 7 行我声明了一个数组,我想在该数组中存储一些我从数据库模型中获取的对象。 在第 15 行,我试图将对象形式推送到我的数组中,以便我可以遍历对象以使用 ejs 在我的页面上显示它们。但是我做不到。

截图:

  1. 这是我在尝试将对象推入数组后得到的最终结果:

empty array logged

  1. 以下是我要推送的对象:

Objects

代码:

app.get("/cart", (req, res) => {
    if (req.isAuthenticated()) {
        const findcartdata = req.user.username;
        userData.findOne({email: findcartdata}, (err, BookId) => {
            // console.log(BookId.cartItemId);
            const idArray = BookId.cartItemId;
            var bookArray = [];
            idArray.forEach((data) => {
                productData.findOne({_id: data}, (err, foundBookData) =>{
                    // console.log(foundBookData);
                    if(err){
                        console.log(err);
                    }
                    else{
                        bookArray.push(foundBookData);
                    }
                })
            });
            console.log(bookArray);
            // res.render("cart", {
            //     cartBookArray: BookId.cartItemId
            // })
        });
    } else {
        res.redirect("/login");
    }
})

在上面的代码中,我使用护照身份验证用户方法找到了用户的电子邮件,并使用该电子邮件将产品添加到不同的 javascript 数组中(我打算将其传递到购物车的 ejs 文件中然后在列表中迭代它)使用我从另一个名为 userData 的模型获得的那些 Id 数组。问题是我能够找到每个 Id 的 userData 但无法将它们存储为对象数组。

看起来像是一个时间问题,您的代码在数据库下载对象并将它们推送到您的数组之前完成。

这应该可以解决您的问题:

// ...
const idArray = BookId.cartItemId;
var bookArray = [];
for (const data of idArray) {
    const foundBookData = await productData.findOne({_id: data}).catch(console.error);
    if (!foundBookData) continue;
    bookArray.push(foundBookData);
}

console.log(bookArray);
// ...

顺便说一下,确保整个函数也是异步的,这可以通过更改以下行来完成:

userData.findOne({email: findcartdata}, async (err, BookId) => { // ...