// Thing is a mongoose model imported from thing.model.js file (the mongoose in that file has been promisify)
exports.show = function(req, res) {
return res.json(getThing(req.params.id))
};
function getThing(thingID){
return Thing.findByIdAsync(thingID).then(function(thing){
return thing;
})
}
如何从功能中解决问题。现在,它只返回一个promise对象(解析和拒绝字段)。如果我删除getThing帮助函数中的第一个'return',它将不返回任何内容。 (我尝试了console.log(当时回调块中的东西,它工作正常))
如果我这样写:
exports.show = function(req, res) {
return Thing.findByIdAsync(req.params.id)
.then(function(thing){return res.json(thing);})
};
它会起作用!为什么呢?
答案 0 :(得分:2)
这是您的顶级代码段
exports.show = function(req, res) {
return res.json(getThing(req.params.id))
};
function getThing(thingID){
return Thing.findByIdAsync(thingID).then(function(thing){
return thing;
})
}
在getThing
中.then是多余的,因此getThing
基本上是
function getThing(thingID){
return Thing.findByIdAsync(thingID);
}
所以exports.show基本上是
exports.show = function(req, res) {
return res.json(Thing.findByIdAsync(req.params.id))
};
你实际上是在Promise上做一个res.json
与:
不同exports.show = function(req, res) {
return Thing.findByIdAsync(req.params.id)
.then(function(thing){return res.json(thing);})
};
您要返回findByIdAsync
如果要拆分功能
,您想要做什么exports.show = function(req, res) {
return getThing(req.params.id)
.then(function(thing){return res.json(thing);})
};
function getThing(thingID){
return Thing.findByIdAsync(thingID);
}
或
exports.show = function(req, res) {
return getThing(req.params.id);
};
function getThing(thingID){
return Thing.findByIdAsync(thingID)
.then(function(thing){return res.json(thing);});
}