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吗?@Bergi
defaultJsonResponse(res)
返回一个只需要承诺结果的回调@Filipe,问题不是响应返回undefined,问题是当我到达行
if(njson)res.json(njson)时
未定义
res
参数。还要注意的是,
notFound(res)
的结构与
defaultJsonResponse(res)
类似,它返回回调。@laazer:噢,天哪,我瞎了。当然应该。您实际的问题是,您有两个同名的函数
defaultJsonResponse
,第二个函数覆盖了第一个函数,最后出现的情况是您调用第二个函数时没有
res
。您必须先将回调传递给
然后
,而不是函数调用的结果。将它们包装在函数表达式中。为什么要定义两次函数defaultJsonResponse?您还缺少if/else语句后面的括号。@user2263572,不需要括号。你确定你会得到回应吗?如果是,您能提供JSON吗?@Bergi
defaultJsonResponse(res)
返回一个只需要承诺结果的回调@Filipe,问题不是响应返回undefined,问题是当我到达行
if(njson)res.json(njson)时
未定义
res
参数。还要注意的是,
notFound(res)
的结构与
defaultJsonResponse(res)
类似,它返回回调。@laazer:噢,天哪,我瞎了。当然应该。您实际的问题是,您有两个同名的函数
defaultJsonResponse
,而第二个函数覆盖了第一个函数,最后出现了您调用第二个函数时没有
res
的情况。