Mongoose - 查询exec()从不在模型方法中解析

时间:2017-04-11 09:00:59

标签: javascript node.js mongoose promise mongoose-schema

在尝试重构将在不同位置使用的某些代码时,我将此方法从控制器移动到Mongoose模型。

在模型中,trackQuery.exec()永远不会到达回调,永远无法解析。如果我在没有exec()或没有等待exec()的情况下解决,它就可以正常工作。使用Mongoose trackQuery正确填充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;
    });
}

1 个答案:

答案 0 :(得分:0)

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