我有这个功能,使用MongooseJS,Node和JS:
module.exports.getNextSequence = function (sequenceName) {
var query = { "_id": sequenceName };
var update = { $inc: { seq: 1 } };
var options = { new: true };
this.sequence.findOneAndUpdate(query, update, options, function (err, nextNumber) {
if (err) {
console.log('got an error');
};
console.log(nextNumber._doc.seq);
return nextNumber._doc.seq;
});
};
...我按照以下方式调用它:
var song = sequenceHandler.getNextSequence(CONST.SONG_NUMBER_SEQUENCE);
var album = sequenceHandler.getNextSequence(CONST.ALBUM_NUMBER_SEQUENCE);
在调试模式下,一切正常,但在运行模式下,我有一个未定义的值。
我做错了什么?
答案 0 :(得分:0)
我不知道它在调试中会如何工作,因为getNextSequence
不会返回任何值。 findOneAndUpdate
中的回调返回一个值,但没有任何内容读取。
您需要将回调函数传递到getNextSequence
,然后使用nextNumber._doc.seq
调用它而不是返回。
示例:
module.exports.getNextSequence = function (sequenceName, callback) {
var query = { "_id": sequenceName };
var update = { $inc: { seq: 1 } };
var options = { new: true };
this.sequence.findOneAndUpdate(query, update, options, function (err, nextNumber) {
if (err) {
console.log('got an error');
callback(err);
return;
};
console.log(nextNumber._doc.seq);
callback(null, nextNumber.doc_seq);
});
};
var song = sequenceHandler.getNextSequence(CONST.SONG_NUMBER_SEQUENCE);
var album = sequenceHandler.getNextSequence(CONST.ALBUM_NUMBER_SEQUENCE);