无法从javascript函数调用获取返回值
我正在开发一个简单的angular2/expressJS应用程序。我在expressJS中有一个http get路由器调用,如下所示,它应该会返回来自mongoDB的所有用户,这很好:无法从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
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);
});
})
}
因为它太神奇了!!非常感谢