我在使用promise的node.js中爲GET請求寫了一個簡單的控制器。該代碼的作品,但我不是100%確定爲什麼。我有一個getStoriesHelper函數返回一個承諾,並在得到結果後,它的確可以做到return res.json(listOfStories);
。這是有效的,但我的印象是,返回只是打破了單個函數作用域(所以我認爲它只應該跳出匿名函數作用域),並且只是想知道爲什麼它會突破getStories函數呢?在promise中返回聲明
//for instance, the return statement only breaks out of the anonymous function and not from dummy()
function dummy() {
_.map([1, 2, 3], function(element) {
return element * 2;
}
}
//node.js controller
exports.getStories = function(req, res) {
var studentId = req.params.studentId;
User.findOne({role: 'student', _id: studentId}).exec()
.then(function(student) {
var isNursery = student.status === 'attending class' && user.bookLevel === 'nursery';
getStoriesHelper(student, isNursery).then(function(listOfStories) {
//shouldn't return only break out of this inner function scope
return res.json(listOfStories)
});
});
};
//dummy async code
function getStoriesHelper() {
var deferred = Q.defer();
setTimeout(function() {
deferred.resolve(123)
}, 3000);
return deferred.promise;
}
它沒有。外部功能已經結束。 'res.json'發送一個響應。另外,你應該從'then's內部返回promise,這樣你就可以處理錯誤併發送響應,而不需要基於回調的東西。 – Ryan 2014-09-25 14:58:49