猫鼬帮助,为啥我得到空值?

Posted

技术标签:

【中文标题】猫鼬帮助,为啥我得到空值?【英文标题】: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 解决之前执行。 【参考方案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()

以上是关于猫鼬帮助,为啥我得到空值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 Flutter 中使用 Firestore 中的 foreach 方法后得到空值?

为啥添加一列时所有行都得到空值?

为啥我在 Flutter 测试期间使用 rootBundle.load 得到“对空值使用空检查运算符”?

如果这个nodejs rest api没问题并且它的mongoose结构和mongodb数据,为啥我从mongoDB得到空值?

为啥需要猫鼬填充?

为啥针对 S3 的 pyspark sql 查询返回空值