2016-03-16 51 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

我的大腦陷入了範圍戰中,謝謝! :) –