【问题标题】:mongoose help, why i'm getting null?猫鼬帮助,为什么我得到空值?
【发布时间】:2020-11-03 11:39:26
【问题描述】:

我正在尝试获取 item._id,因为我从 req.body.items 获取它作为数组。 我需要将每个项目作为一个单独的项目将其推送到我的新订单中。_items 数组。

     app.post('/orders/:userEmail/',(req,res)=>{
         let itemNew=new Item();
          let orderNew=new Order();
          let itemArray=req.body.items;
          
         async function getItem(item) {
            try {
              const itemp = await Item
                .findOne({ Id: item });
              return itemp;
            }
            catch (err) {
              console.log(err);
            }
        }
    
        for(let item of itemArray ){
           getItem (item)
              .then(ItemReturned=> {
                orderNew._items(ItemReturned) **//here i get the correct item**
              });
              console.log("orderNew._items-----"+orderNew._items);**//here i get null**
              }
         }

【问题讨论】:

  • 看起来console.log("orderNew._items-----"+orderNew._items) 语句将在promise 解决之前执行。

标签: angular mongoose


【解决方案1】:

您必须将您的 console.log("orderNew._items-----"+orderNew._items); 语句放在 then 块中。

    for(let item of itemArray ){
       getItem (item)
          .then(ItemReturned=> {
            orderNew._items(ItemReturned)
            console.log("orderNew._items-----"+orderNew._items);
          });
          }
     }

因为当node 解释器看到.then() 回调时,它会将回调推送到回调队列并继续执行,而此时您的回调尚未准备好并且您的console.log() 打印为null。

【讨论】:

  • 我猜这是问题,但我无法解决它。你有提议吗?我该怎么办?
  • 我设法得到了答案。但我得到了[object Promise]。我不知道如何处理这个。
  • ItemReturned的类型是什么
  • 它应该来自项目类型。这是我从异步函数 getItem 中得到的
  • 你到底想做什么。如果您想保存具有_items 数组的订单,更好的方法是使用orderNew = new Order({_items: ItemReturned}),然后将其保存orderNew.save()
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多