我正在开发一个简单的 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背景,所以我可能会犯一些基本错误。感谢您的帮助!!
谢谢
最佳答案
您需要将其包装在这样的 promise 中:
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);
});
})
}
关于javascript - 无法从 javascript 函数调用获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44963301/