我正在开发一个简单的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背景,所以我可能会做一些基本的错误。感谢您的帮助!!
由于
答案 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);
});
})
}