猫鼬在循环中获取多个对象

问题描述 投票:0回答:1

我正在尝试使用mongoose从MongoDB获取多个对象。我有两个主表名为user和order。

用户有一个名为订单历史的数组,订单历史包含订单。

当我将订单推送到订单数组时,订单成功推送。但是当我想从循环外部获取命令时,由于循环内部发生异步操作,我的数组没有任何结果。

CODE

userModel.findOne({'username': username }, function (err, user) {
        if(user){
            var orders = [] 

            for(var i=0;i<user.orderHistory.length;i++){
                var orderId = user.orderHistory[i].orderId

                var order = orderModel.findOne({'id': orderId}).exec()

                order.then(function(order){
                    orders.push(order)
                })              
            }

            orders.then(function(order){
                console.log(order)
            })
        }
    })

如何在循环之外获得订单?萨诺斯

javascript mongodb mongodb-query
1个回答
2
投票

改为使用异步函数,每个订单使用await

userModel.findOne({ username }, async function (err, user) {
  if (!user) return;
  const orders = [];
  for (const { orderId: id } of user.orderHistory) {
    const order = await orderModel.findOne({ id }).exec();
    orders.push(order);
  }
  console.log(orders);
})
© www.soinside.com 2019 - 2024. All rights reserved.