Reputation: 1353
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
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