Javascript 承诺中未定义的明示回应
我在建立回应时使用承诺。我的代码如下所示:Javascript 承诺中未定义的明示回应,javascript,express,q,Javascript,Express,Q,我在建立回应时使用承诺。我的代码如下所示: app.get("/api/assignment/user", getUserByUsername); function getUserByUsername (req, res) { var username = req.query.username; model.findUserByUsername(username) .then(defaultJsonResponse(res), notFound(res)); }
app.get("/api/assignment/user", getUserByUsername);
function getUserByUsername (req, res) {
var username = req.query.username;
model.findUserByUsername(username)
.then(defaultJsonResponse(res), notFound(res));
}
function defaultJsonResponse(res) {
return function(nObj) { defaultJsonResponse(nObj, res)};
}
function defaultJsonResponse(njson, res) {
if(njson) res.json(njson);
else notFound(res, "error");
}
当我运行getUserByUsername
方法时,我得到TypeError:无法读取未定义的属性“json”
。
我很难理解为什么在
defaultJsonResponse(njson,res)
中响应是undefined
,答案是@Bergi在上面的评论中说的,这是我对JavaScript函数重载缺乏理解。通过给方法两个不同的名称,问题得到了解决。答案正如@Bergi在上面的评论中所说的,这就是我对JavaScript函数重载缺乏理解。只需给方法两个不同的名称,问题就解决了。您必须先将回调传递给,然后传递给,而不是函数调用的结果。将它们包装在函数表达式中。为什么要定义两次函数defaultJsonResponse?您还缺少if/else语句后面的括号。@user2263572,不需要括号。你确定你会得到回应吗?如果是,您能提供JSON吗?@BergidefaultJsonResponse(res)
返回一个只需要承诺结果的回调@Filipe,问题不是响应返回undefined,问题是当我到达行if(njson)res.json(njson)时
未定义res
参数。还要注意的是,notFound(res)
的结构与defaultJsonResponse(res)
类似,它返回回调。@laazer:噢,天哪,我瞎了。当然应该。您实际的问题是,您有两个同名的函数defaultJsonResponse
,第二个函数覆盖了第一个函数,最后出现的情况是您调用第二个函数时没有res
。您必须先将回调传递给然后
,而不是函数调用的结果。将它们包装在函数表达式中。为什么要定义两次函数defaultJsonResponse?您还缺少if/else语句后面的括号。@user2263572,不需要括号。你确定你会得到回应吗?如果是,您能提供JSON吗?@BergidefaultJsonResponse(res)
返回一个只需要承诺结果的回调@Filipe,问题不是响应返回undefined,问题是当我到达行if(njson)res.json(njson)时
未定义res
参数。还要注意的是,notFound(res)
的结构与defaultJsonResponse(res)
类似,它返回回调。@laazer:噢,天哪,我瞎了。当然应该。您实际的问题是,您有两个同名的函数defaultJsonResponse
,而第二个函数覆盖了第一个函数,最后出现了您调用第二个函数时没有res
的情况。