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

无法从javascript函数调用获取返回值,javascript,node.js,express,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 userl

我正在开发一个简单的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;
    }
});
现在,我尝试将get user list部分拆分为一个单独的函数,如下所示,以便可以重用它

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背景,所以我可能犯了一些基本的错误。谢谢你的帮助


谢谢

你需要用这样的承诺来包装它:

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);
      });
    })
}

因为它太神奇了!!非常感谢