我编写了以下代码来获得用户的所有使用说明。而当我得到它们时,我已经按照如下进行了更新。代码非常适合父母的诺言。游览状态正确更新。然后,我需要获取每个游览报价计数。但是内在的诺言返回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
属性的值,而是一个承诺。因此,您需要await
find()
,而不是find().length
。使用括号:
(await Offer.find({
tour: tour._id,
offerStatus: 'new'
})).length
备注:如果我们更加关注承诺的谈论方式,则此类错误发生的可能性可能会降低。不要说“内部承诺返回null”,而是说:“内部承诺解析为null”。因为:promises不返回任何东西-它们不是函数,而仅仅是对象。这些对象在使用值解析或拒绝时会更改状态。
关于javascript - Mongoose 的 promise 数组中的 promise ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59820959/