【发布时间】:2017-09-06 13:34:40
【问题描述】:
为了尝试重构一些将在不同地方使用的代码,我将这个已经在控制器中工作的方法移到了 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;
});
}
【问题讨论】:
标签: javascript node.js mongoose promise mongoose-schema