我编写了以下代码来获得用户的所有使用说明。而当我得到它们时,我已经按照如下进行了更新。代码非常适合父母的诺言。游览状态正确更新。然后,我需要获取每个游览报价计数。但是内在的诺言返回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/

10-11 03:42
查看更多