Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回一个2”的响应;同步;嵌套查询(Express、Mongoose)_Javascript_Arrays_Express_Mongoose - Fatal编程技术网

Javascript 返回一个2”的响应;同步;嵌套查询(Express、Mongoose)

Javascript 返回一个2”的响应;同步;嵌套查询(Express、Mongoose),javascript,arrays,express,mongoose,Javascript,Arrays,Express,Mongoose,我想返回如下元素数组: ApiResponse = [ {_id: 1, name: Mike, transactions: 5}, {_id: 2, name: Jhon, Transactions: 10} ] 第一个数据“Users”来自对模式“Users”的查询,“Transactions”编号来自对其他模式“Transactions”的查询 我尝试了下一个逻辑: 使用以下命令获取所有用户: 使用map函数迭代“respUsers”数

我想返回如下元素数组:

ApiResponse = [
   {_id: 1,
   name: Mike,
   transactions: 5},
   
    {_id: 2,
    name: Jhon,
    Transactions: 10}
]
第一个数据“Users”来自对模式“Users”的查询,“Transactions”编号来自对其他模式“Transactions”的查询

我尝试了下一个逻辑:

  • 使用以下命令获取所有用户:

  • 使用map函数迭代“respUsers”数组:

  • 对于我得到的每个“用户”,我想查询与以下各项相关的所有交易:

  • 然后我只需要数组的“长度”,这样:

  • 最后,我希望map函数返回一个对象数组,如:

  • 要完成api控制器的下一个完整代码,请执行以下操作:

    exports.list = async (req, res) => {
        //Find all users
        const respUsers = await User.find().exec();
    
        const responseArray = respUsers.map(async (user) => {
            let transactions = await Transactions.find({
                doctorOwner: user._id,
            }).exec();
            let transactionsLength = await transactions.length;
    
            return {
                _id: user._id,
                name: user.name,
                transactions: transactionsLength 
            };
        });
    
        console.log(responseArray);
    
        res.json(responseArray);
    };
    
    但我得到了3个空数组[]、[]、[]

    如果我在服务器端使用console.log,我会得到:

    [ Promise { <pending> }, Promise { <pending> }, Promise { <pending> } ]
    
    [Promise{},Promise{},Promise{}]
    

    我该怎么做呢?

    这段代码有效。它是关于Promise.all()的。它创建了一个承诺,当内部的所有其他承诺都得到解决时,该承诺就会得到解决

    //模拟User.find().exec())
    异步函数getUsers(){
    还愿([
    {
    _id:“id1”,
    姓名:“约翰”,
    },
    {
    _id:“id2”,
    姓名:“约翰尼”,
    },
    {
    _id:“id3”,
    姓名:“乔纳斯”,
    },
    ]);
    }
    //模拟事务。查找({}doctorOwner:user.\u id)
    异步函数getTransactions(){
    常数arr=[];
    for(设i=0;i{
    //查找所有用户
    让respUsers=wait getUsers();
    const responseArray=Promise.all(
    respUsers.map(异步(用户)=>{
    让事务=等待getTransactions();
    让TransactionLength=transactions.length;
    常数返回={
    _id:user.\u id,
    name:user.name,
    事务:TransactionLength,
    };
    回归回归;
    })
    );
    控制台日志(等待响应RAY);
    };
    超级函数()
    
    。作为控制台包装器{
    最大高度:100%!重要;
    排名:0;
    
    }
    我添加了如您所示的等待JU,但仍然得到了[Promise{},Promise{},Promise{}]奇怪的结果。仔细考虑之后,map函数似乎已经正确地完成了它的工作,但它返回了承诺。。。我做了编辑。现在的输出是什么?我对你温和地建议我的代码进行了所有更改,我仍然得到[Promise{},Promise{},Promise{}]我调试并编辑了它,这是代码!当然,您应该删除并替换仿真函数,它们只是为了使用SO代码片段进行演示;抱歉不起作用:(