我试图在数组中填充函数后获取它,但是当我打印出它时它是空的。
代码:
var usersList = [];
app.post('/submitLogin',function(req,res) {
getUsersGroups();
console.log(usersList);
});
function getUsersGroups() {
const users = new Promise((resolve, reject) => {
dbConnection
.getUsers()
.then(data => {
resolve(data)
})
});
const groups = new Promise((resolve, reject) => {
dbConnection
.getGroups()
.then(data => {
resolve(data)
})
});
Promise.all([users, groups])
.then(data => {
usersList = data[0];
groupsList = data[1];
console.log(usersList)
});
}
但是,getUsersGroups()
中的console.log会打印出已填充的数组,但在app.post('/submitLogin...')
中却为空
为什么在我尝试打印数组之前假设getUsersGroups()
运行,这会发生什么?
答案 0 :(得分:2)
您没有观察到数据库调用的异步执行。
console.log(usersList);
发生在数据库调用之前,因此为空。
您必须像这样修改代码,并在执行数据库后发布代码:
app.post('/submitLogin', function (req, res) {
getUsersGroups().then((data) => {
console.log(data)
res.send(data.usersList)
})
})
function getUsersGroups () {
const users = new Promise((resolve, reject) => {
dbConnection
.getUsers()
.then(data => {
resolve(data)
})
})
const groups = new Promise((resolve, reject) => {
dbConnection
.getGroups()
.then(data => {
resolve(data)
})
})
return Promise.all([users, groups])
.then(data => {
console.log(data[0])
return {
usersList: data[0],
groupsList: data[1]
}
})
}
我强烈建议不要更改像usersList
这样的全局变量(我从示例中删除了该变量)
因为如果您同时收到两个请求,第二个请求可能会覆盖第一个请求的数据,
会引起很多副作用。
答案 1 :(得分:0)
app.post('/submitLogin', async function(req,res) {
await getUsersGroups();
console.log(usersList);
});
尝试