猫鼬帮助,为啥我得到空值?
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得到空值?