javascript - Mongoose 中的 promise 数组中的 promise

标签 javascript node.js mongodb mongoose

我编写了以下代码来获取用户的所有游览。当得到它们时,我更新如下。代码完全符合 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/

相关文章:

javascript - 自定义 wpDataTables JS - 正面和负面

mongodb - NoSQL(例如 MongoDB)能否取代数据网格解决方案,例如甲骨文一致性

mongodb - Mongo聚合没有更新实际文档

javascript - 将新记录插入数据库时​​是否需要使用模型?

scala - 如何查询 Array[String] 中的正则表达式匹配项?

javascript - Jquery UI 自动完成输入 - 如何检查更改时输入是否为空?

javascript - 为什么 JavaScript 中有 Math.SQRT2 属性?

javascript - 我如何执行这些 javascript 模块模式?

node.js - 适用于 NodeJS 的 Firebase 动态链接构建器 API

node.js - EXPORT 在部署在 pm2 中的 ts 文件 Node 应用程序中不起作用