为了重构一些将在不同地方使用的代码,我将这个已经可以工作的方法从 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/