Node.js 调用填充数组的函数后为空数组

Node.js 调用填充数组的函数后为空数组,node.js,promise,Node.js,Promise,我试图在函数中填充数组后获取该数组,但打印出来时它是空的 代码: 但是,getUsersGroups()中的console.log打印出填充的数组,但在app.post(“/submitLogin…”)中它是空的。 为什么在我尝试打印数组之前运行getUsersGroups()时会发生这种情况 app.post('/submitLogin', async function(req,res) { await getUsersGroups(); console.log(use

我试图在函数中填充数组后获取该数组,但打印出来时它是空的

代码:

但是,
getUsersGroups()
中的console.log打印出填充的数组,但在
app.post(“/submitLogin…”)中它是空的。

为什么在我尝试打印数组之前运行
getUsersGroups()
时会发生这种情况

    app.post('/submitLogin', async function(req,res) {
    await getUsersGroups();
    console.log(usersList);    
});
试试这个


尝试此操作

您没有观察到数据库调用的异步执行。
console.log(usersList)
发生在db调用之前,因此它是空的

您必须像这样修改代码,并在db执行后发布代码:

app.post('/submitLogin',函数(req,res){
getUsersGroups()。然后((数据)=>{
console.log(数据)
res.send(data.usersList)
})
})
函数getUsersGroups(){
const users=新承诺((解决、拒绝)=>{
数据库连接
.getUsers()
。然后(数据=>{
解析(数据)
})
})
常量组=新承诺((解决、拒绝)=>{
数据库连接
.getGroups()
。然后(数据=>{
解析(数据)
})
})
返回承诺。所有([用户、组])
。然后(数据=>{
console.log(数据[0])
返回{
usersList:数据[0],
groupsList:数据[1]
}
})
}
我强烈建议不要更改全局变量,如
usersList
(我从示例中删除了该变量) 因为如果您同时收到两个请求,那么第二个请求可能会覆盖第一个请求的数据,并且
造成许多副作用。

您没有观察到数据库调用的异步执行。
console.log(usersList)
发生在db调用之前,因此它是空的

您必须像这样修改代码,并在db执行后发布代码:

app.post('/submitLogin',函数(req,res){
getUsersGroups()。然后((数据)=>{
console.log(数据)
res.send(data.usersList)
})
})
函数getUsersGroups(){
const users=新承诺((解决、拒绝)=>{
数据库连接
.getUsers()
。然后(数据=>{
解析(数据)
})
})
常量组=新承诺((解决、拒绝)=>{
数据库连接
.getGroups()
。然后(数据=>{
解析(数据)
})
})
返回承诺。所有([用户、组])
。然后(数据=>{
console.log(数据[0])
返回{
usersList:数据[0],
groupsList:数据[1]
}
})
}
我强烈建议不要更改全局变量,如
usersList
(我从示例中删除了该变量) 因为如果您同时收到两个请求,那么第二个请求可能会覆盖第一个请求的数据,并且
造成许多副作用。

您没有返回任何内容。返回承诺和其中的内容。我尝试返回它,但打印时它是
未定义的。您没有返回任何内容。返回承诺和其中的内容。我尝试返回它,但打印时它是
未定义的。仍然是空数组和我的代码编辑器说,
await对这个表达式的类型没有影响
仍然是空数组,我的代码编辑器说,
await对这个表达式的类型没有影响
好的,谢谢,我想试试,但是有个问题。。。如果我需要访问其他函数中的usersList变量,该怎么办?每次需要数据时,我都必须调用
getUsersGroups()
吗?不,但是如果您正在开发一个状态完整的API,您必须意识到这一点,并避免发生冲突。例如,如果用户列表基于“customerKey”,则可以使用key:customerKey和value-userList创建一个
Map
。因此HTTP请求发送customerKay以访问一个我理解的专用UserList。我不是在开发API,但很高兴知道。我已经试过你的代码,现在可以用了。谢谢!:)好的,谢谢,我想试试,但是有个问题。。。如果我需要访问其他函数中的usersList变量,该怎么办?每次需要数据时,我都必须调用
getUsersGroups()
吗?不,但是如果您正在开发一个状态完整的API,您必须意识到这一点,并避免发生冲突。例如,如果用户列表基于“customerKey”,则可以使用key:customerKey和value-userList创建一个
Map
。因此HTTP请求发送customerKay以访问一个我理解的专用UserList。我不是在开发API,但很高兴知道。我已经试过你的代码,现在可以用了。谢谢!:)
    app.post('/submitLogin', async function(req,res) {
    await getUsersGroups();
    console.log(usersList);    
});