在尝试重构将在不同位置使用的某些代码时,我将此方法从控制器移动到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;
});
}
答案 0 :(得分:0)
我的解决方案是手动导入TrackModel
,而不是依赖于通常的运行时mongoose.model('Track')
方法。我没有解释为什么mongoose.model
在这种情况下不起作用。任何提示都受到欢迎。