Javascript mongoose中promises数组中的Promise
我编写了以下代码来获取用户的所有巡演。当得到它们时,我已经更新如下。代码完全适用于父承诺。巡更状态正确更新。。然后我需要让每一次旅行都有价值。但内心的承诺是无效的。谁能帮我解决这个问题Javascript mongoose中promises数组中的Promise,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我编写了以下代码来获取用户的所有巡演。当得到它们时,我已经更新如下。代码完全适用于父承诺。巡更状态正确更新。。然后我需要让每一次旅行都有价值。但内心的承诺是无效的。谁能帮我解决这个问题 const response = await Tour.find({ customer: user.id }).sort({ createdAt: -1 }); const toursPromises = response.map(async tour => {
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);
const response=wait-Tour.find({customer:user.id}).sort({
createdAt:-1
});
const toursPromises=response.map(异步旅行=>{
如果(tour.tourStatus=='new'&&tour.transferDate
find()
不返回带有length
属性的值,而是一个承诺。因此,您需要等待查找()
,而不是查找().length
。使用括号:
(await Offer.find({
tour: tour._id,
offerStatus: 'new'
})).length
备注:如果我们更加注意如何谈论承诺,那么此类错误可能会更少发生。不要说“内部承诺返回null”,而是:“内部承诺将解析为null”。因为:承诺不会返回任何东西——它们不是函数,只是对象。这些对象使用值解析时会更改状态,或使用原因拒绝。find()
不会返回带有length
属性的值,而是返回一个承诺。因此,您需要等待查找()
,而不是查找().length
。使用括号:
(await Offer.find({
tour: tour._id,
offerStatus: 'new'
})).length
备注:如果我们更加注意如何谈论承诺,那么此类错误可能会更少发生。不要说“内部承诺返回null”,而是:“内部承诺将解析为null”。因为:承诺不会返回任何东西——它们不是函数,只是对象。这些对象在使用值解析时会更改状态,或者在使用原因拒绝时会更改状态。您在哪里得到空响应?您在哪里得到空响应?非常感谢@trincot。。我还有一个问题。。。在promises中使用promise,是不是编码不好,对性能不好?我看不出有什么问题。这个承诺实际上并不存在于另一方,因为它是在另一方(外部)被创建之前解决的。因此,Offer.find
首先得到解决,然后执行继续调用findbyidanddupdate
,这将创建下一个承诺。@亚当将太多的承诺传递给了承诺。这一切都有问题吗?@RaghuChahar,你的问题与我的答案有关吗?如果没有,也许可以在问题下发表评论,而不是在我的回答下?@trincot我很抱歉我提到了你。实际上我是在问你这个。非常感谢你@trincot。。我还有一个问题。。。在promises中使用promise,是不是编码不好,对性能不好?我看不出有什么问题。这个承诺实际上并不存在于另一方,因为它是在另一方(外部)被创建之前解决的。因此,Offer.find
首先得到解决,然后执行继续调用findbyidanddupdate
,这将创建下一个承诺。@亚当将太多的承诺传递给了承诺。这一切都有问题吗?@RaghuChahar,你的问题与我的答案有关吗?如果没有,也许可以在问题下发表评论,而不是在我的回答下?@trincot我很抱歉我提到了你。实际上我是在问你这个。