javascript - 如何解决我的异步函数?

标签 javascript node.js asynchronous mongoose

我想获取数据库中每个商店的用户数量。因此,我在数据库中调用了两个电话,一个用于商店,另一个用于用户。我有一个问题,我的“nbr_users”返回值中没有任何内容。您能帮忙吗?

function nbr_users(key) {
    return new Promise((resolve, reject) => {
        db.User.find({
            shop: key
        }, (err, users) => {
            if (err) reject(err)
            else {
                resolve(users.length) // Maybe my problem is here...
            }
        })
    })
}

module.exports = (req, res) => {
    db.Account.find({},
    (err, accounts) => {
        if (err) res.json(err)
        else {
            var accountMap = {}
            var i = 0;
            accounts.forEach(async function(account) {
                accountMap[i++] = {
                    users: await nbr_users(account.key) // the value I want
                }
              });
            res.json({user_list: accountMap})
        }
    })
}

最佳答案

您从 nbr_users(key) 返回了一些内容。你有一个 promise ,那么你可以使用.then

因为你处于异步循环中。函数,并且您不想丢失 i 我建议您使用匿名 Immediately-invoked function expression

function(i){
    nbr_users(account.key).then(function(length){
      accountMap[i] = {
        users: length
    })
}(i++);

关于javascript - 如何解决我的异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49997814/

相关文章:

c++ - C++ 异步释放数据

c++ - boost::asio 将动态大小的数据传递给异步处理程序时出现问题

javascript - 如何配置 SystemJS 来识别已加载的库(如 jquery)?

javascript - 外部链接打不开

node.js - 如何在nodejs中上传根文件夹之外的文件?

javascript - 未定义的成员.voiceChannel

javascript - 更改传单图层控件图标

javascript - react 组件已卸载

javascript - 如何解决此 dialogflow 错误 : text input not set?

javascript - 处理异步回调