0

I have this function, using MongooseJS, Node and 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;
    });

};

...and I'm invoking it as follows:

  var song = sequenceHandler.getNextSequence(CONST.SONG_NUMBER_SEQUENCE);
  var album = sequenceHandler.getNextSequence(CONST.ALBUM_NUMBER_SEQUENCE);

In debugging mode, everything works fine, but in running mode I've got an undefined value.

What am I doing wrong?

Robert Gannon
  • 253
  • 4
  • 13
Sahar Ben-Shushan
  • 297
  • 1
  • 3
  • 20

1 Answers1

0

I don't know how it would have worked in debugging, because getNextSequence does not return any value. The callback in findOneAndUpdate returns a value, but nothing reads that.

You'll need to pass a callback function into getNextSequence and then call it with nextNumber._doc.seq instead of returning.

Example:

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);
mdickin
  • 2,365
  • 21
  • 27