循环中的数据库查询仅返回一个空数组

Posted

技术标签:

【中文标题】循环中的数据库查询仅返回一个空数组【英文标题】:Database query in loop returns only an empty array 【发布时间】:2019-12-04 03:53:08 【问题描述】:

'requestingUserIds' 是一个数组,具有不同的 id。每个 id 都属于表“users”中的一个用户名。这就是为什么我要循环,对于数组“requestingUserIds”中的每个 ID,将相应的用户名循环到数组“requestingUserUsernames”中,最后将完整数组(requestingUserUsernames)记录到控制台中。但是如果我在then函数之外做,只会输出一个空数组,可能是我一开始初始化的数组。

当我在控制台的 then 函数中记录数组“requestingUserUsernames”时,每次循环都会输出数组,但我只想输出最终数组。

requestingUserIds.forEach(userId => 
    db('users')
        .select('username')
        .where(id: userId)
        .then(rows => 
            requestingUserUsernames.push(rows[0].username);
         )
         .catch(error => console.log(error));
);
console.log(requestingUserUsernames);````

【问题讨论】:

因为它是一个异步操作......你还没有回复 这是我的假设,但我该如何解决呢? 参考我在***.com/questions/57058467/…的回答 【参考方案1】:

试试这个

const requestingUserUsernames = await Promise.all(requestingUserIds.map(userId =>
    db('users')
        .select('username')
        .where(id: userId)
        .then(rows => rows[0].username)));
console.log(requestingUserUsernames);

确保它在异步函数中

【讨论】:

【参考方案2】:
requestingUserIds.forEach(userId => 
    db('users')
        .select('username')
        .where(id: userId)
        .then(rows => 
            requestingUserUsernames.push(rows[0].username);
            if (requestingUserUsernames.length ==  requestingUserIds.length) 
                console.log(requestingUserUsernames);
                                            
    )
    .catch(error => console.log(error));

这也有效,但我不确定它是否像下面这样干净。

【讨论】:

以上是关于循环中的数据库查询仅返回一个空数组的主要内容,如果未能解决你的问题,请参考以下文章

为啥阿波罗角查询返回空数组?

thinkphp3.2.3 查询时使用where+select查询出来的比find查询多一个空数组

MySQL 数据库查询返回空结果

mySQL/Sequelize - 如何查询以获取字段为空数组的数据

空查询返回数据库中的所有字段。姜戈

空查询返回数据库中的所有字段。Django