Mongoose - 查询 exec() 永远不会在模型方法中解析
Mongoose - Query exec() never resolves in model method
为了重构一些将在不同地方使用的代码,我将这个已经在控制器中运行的方法移到了 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
在这种情况下不起作用。欢迎任何提示。
为了重构一些将在不同地方使用的代码,我将这个已经在控制器中运行的方法移到了 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
在这种情况下不起作用。欢迎任何提示。