我在使用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