回调函数不返回值

时间:2016-05-24 13:30:08

标签: javascript node.js

我有这个功能,使用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);

在调试模式下,一切正常,但在运行模式下,我有一个未定义的值。

我做错了什么?

1 个答案:

答案 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);