Eric H
Eric H

Reputation: 1353

NodeJs - Bluebird promise.resolve(value) is undefined

I have a service method that creates an object with mongoose which I am attempting to rewrite from callbacks to promises:

var Booking = require("../models/booking");
var Promise = require('bluebird');
var notificationEmitter = require('../events/notificationEmitter').NotificationEmitter;

exports.createBooking = function(/* many arguments */){

var booking = new Booking();

... omitted details of adding to booking object...

booking.save().then(function(booking){
    notificationEmitter.emit('createdBooking', booking);
    return Promise.resolve(booking);
}).catch(function(err){
    return Promise.reject(err);
});
};

And in my unit test:

 bookingService.createBooking(/* all the required values */)
     .then(function(booking){
         assert.notEqual(booking, null);
         done();
     }).catch(function(err){
        console.log(err);
        assert.fail();
        done();
     });

However I keep getting the error:

TypeError: Cannot call method 'then' of undefined   

From my unit test. I've debugged and the last line hit is

return Promise.resolve(booking);

Why am I not getting a promise returned?

Upvotes: 3

Views: 618

Answers (1)

Amit
Amit

Reputation: 46323

Because you're not returning any value from createBooking. Change to:

exports.createBooking = function(/* many arguments */){

var booking = new Booking();

// other code, and:

return booking.save().then(function(booking){
//^^^^ return here


    notificationEmitter.emit('createdBooking', booking);
    return Promise.resolve(booking);
}).catch(function(err){
    return Promise.reject(err);
});
};

Upvotes: 2

Related Questions