无法从javascript函数调用获取返回值

时间:2017-07-07 05:42:51

标签: javascript node.js express

我正在开发一个简单的angular2 / expressJS应用程序。我在expressJS中有一个http get路由器调用,如下所示,它应该从mongoDB返回所有用户,这样可以正常工作:

app.get('/getusers', function(req, res) {

userModel.find({}, function(err, userlist) {
    if (err) return handleError(err);
    else {
        return userlist;
    }
});

现在我正在尝试将获取用户列表部分拆分为单独的函数,如下所示,以便可以重复使用。

app.get('/getusers', function(req, res) {
    var tmpUsrList = getAllUsers();
    console.log(tmpUsrList); //This prints undefined
    res.send(tmpUsrList);
});

function getAllUsers() {
    userModel.find({}, function(err, userlist) {
        if (err) return handleError(err);
        else {
            console.log(userlist); //This prints the correct list
            return userlist;
        }
    });
}

然而,在返回之后,该值变得不确定。我来自java背景,所以我可能会做一些基本的错误。感谢您的帮助!!

由于

1 个答案:

答案 0 :(得分:1)

你需要将它包装在这样的承诺中:

app.get('/getusers', function(req, res) {
    getAllUsers()
    .then(tmpUsrList => {
        console.log(tmpUsrList);
        res.send(tmpUsrList);
    })
    .catch(err => handleError(err))
});

function getAllUsers() {
    return new Promise((resolve, reject) => {
      userModel.find({}, function(err, userlist) {
          if (err) return reject(err);
          // no need of else if you return
          console.log(userlist);
          resolve(userlist);
      });
    })
}