javascript - Mongoose - 查询 exec() 永远不会在模型方法中解析

标签 javascript node.js mongoose promise mongoose-schema

为了重构一些将在不同地方使用的代码,我将这个已经可以工作的方法从 Controller 移动到了 Mongoose 模型。

在模型中,trackQuery.exec() 永远不会到达回调,永远不会解析。如果我在没有 exec() 或没有等待 exec() 的情况下解析,它工作正常。 trackQuery 已正确填充 Mongoose Query

我不明白的 Mongoose 模型的微妙之处是什么?

ArtistSchema.methods.insertRelatedTracks = function (items) {
    const newTracksToSave = items.map((item) => {
        return new Promise((resolve, reject) => {
            const TrackModel = mongoose.model('Track'),
                trackQuery = TrackModel.findOne({ externalID: item.id })
            ;

            return trackQuery.exec((err, track) => {
                if (err) { 
                    return reject(err);
                }

                if (!track) {
                    let track = new TrackModel({
                        externalID: item.id,
                        provider: item.provider,
                        title: item.title,
                        artist: item.artist,
                        artistID: this._id,
                        artistExternalID: this.externalID,
                        thumbnail: item.thumbnail,
                        publishedAt: item.publishedAt,
                        count: 0
                    });

                    return track.save((err, res) => {
                        if (err) {
                            return reject(err);
                        }

                        return resolve(res);
                    });
                }

                return resolve(track);
            });
        });
    });

    return Promise.all(newTracksToSave).then(() => {
        return this;
    }).catch((err) => {
        console.error(err);
        return this;
    });
}

最佳答案

我的解决方案是手动导入 TrackModel 而不是依赖通常的运行时 mongoose.model('Track') 方法。我没有解释为什么 mongoose.model 在这种情况下不起作用。欢迎任何提示。

关于javascript - Mongoose - 查询 exec() 永远不会在模型方法中解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43341269/

相关文章:

javascript - 光标位置到 CSS 网格位置

javascript - Django按钮ajax点击

javascript - 是否可以使用 React Native 来阻止 Android 中的来电?

node.js - 在 Heroku 上运行多个 Node.js 脚本

node.js - Mongoose :如何插入单个子文档 - 而不是数组

javascript - 使用 ExtJS 捕获功能键事件 (F1-F12)

node.js - Alexa 技能响应抱歉,我无法按照您的要求进行操作。请再试一遍

javascript - express.js 不同的路线添加不同的资源

javascript - Node.js:如何处理 pug 中的 getFullYear

javascript - mongoose/mongodb 查询从 javascript 数组中的每个发件人获取最后一个文档