我编写了以下代码来获取用户的所有游览。当得到它们时,我更新如下。代码完全符合 parent 的 promise 。旅游状态正确更新。然后我需要获取每个旅游优惠的数量。但内部 promise 返回 null。谁能帮我解决这个问题。
const response = await Tour.find({ customer: user.id }).sort({
createdAt: -1
});
const toursPromises = response.map(async tour => {
if (tour.tourStatus === 'new' && tour.transferDate < Date.now()) {
return await Tour.findByIdAndUpdate(
tour._id,
{ $set: { tourStatus: 'expired' } },
{ new: true }
);
} else if (tour.tourStatus === 'new') {
return await Tour.findByIdAndUpdate(
tour._id,
{
$set: {
offers: await Offer.find({
tour: tour._id,
offerStatus: 'new'
}).length
}
},
{ new: true }
);
} else {
return tour;
}
});
const tours = await Promise.all(toursPromises);
最佳答案
find()
不会返回带有 length
属性的值,而是返回一个 promise 。因此,您需要 await
find()
,而不是 find().length
。使用括号:
(await Offer.find({
tour: tour._id,
offerStatus: 'new'
})).length
备注:如果我们多注意如何谈论 Promise,也许这样的错误会更少发生。不要说“内部 promise 返回 null”,而是:“内部 promise 解析为null” 。因为: Promise 不返回任何东西——它们不是函数,而只是对象。这些对象在解析某个值或拒绝某个原因时会更改状态。
关于javascript - Mongoose 中的 promise 数组中的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59820959/