2016-03-16 50 views
3

我有与猫鼬这我试图从回调来重写承诺创建一个对象服务的方法:的NodeJS - 蓝鸟promise.resolve(值)是未定义

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); 
}); 
}; 

而且在我的单元测试:

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

不过,我不断收到错误:

TypeError: Cannot call method 'then' of undefined 

从我的单元测试。我已调试并且最后一行命中为

return Promise.resolve(booking); 

为什么我没有收到退还的承诺?

+0

打开警告!蓝鸟会为你找到这些错误。 –

回答

2

因为您没有从createBooking返回任何值。更改为:

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); 
}); 
}; 
+0

我的大脑陷入了范围战中,谢谢! :) –