当前位置: 首页 > 知识库问答 >
问题:

函数返回空数组,如何解决?Javascript,mongoose

赫连俊悟
2023-03-14

我有一个javascript,mongoose函数,它应该返回一个数组。所以基本上我有一个用户模式和一个购物列表模式。用户模式有一个参数authorizedLists,一个购物列表ID数组。我想要的是,通过将用户id作为参数传递,我可以显示用户被授权的列表。这个函数现在返回一个空数组,而我所期望的是一个带有购物列表对象的数组。我知道由于Javascript异步读取代码的方式,它不能正常工作,但我真的很迷恋这里。另外,我对nodejs和mongoose还比较陌生,所以我可能犯了其他错误,但我还没有意识到。

代码:

function getUserAuthLists(req,res){
    const { userId } = req.params;
    var list = [];
    let i = 0;
    User.findById( userId,async function(err, user){  
        if(err) return res.status(404).send(err);
        console.log(user);
        const array = user.authorizedLists;
        console.log(array);
        array.forEach( function(element){
            console.log(element);
            ShoppingList.findById(element , (error, result)=>{
                if(error) {
                    console.log(error);
                    return res.status(404).send(error);
                }
                list.push(result);
                console.log(list);
            });
            i++;
        });
        if(i === array.length) {
            console.log(list);
            return  res.status(202).send(list);
        }
    });
}

提前谢谢你。

共有1个答案

秦宁
2023-03-14

重构函数以使用承诺,收集所有AuthorizedLists并使用$in运算符一次性传递它,而不是重复执行FindById

async function getUserAuthLists(req, res){
    try {
        const { userId } = req.params;
        let i = 0;
    
        const user = await User.findById(userId).exec();
        const list = await ShoppingList.find({
            _id: {
                $in: user.authorizedLists
            }
        }).exec();
        return  res.status(202).send(list);
    } catch (err) {
        return res.status(404).send(err);
    }
}
 类似资料:
  • 问题内容: 我在返回查询时遇到了几个问题。 在这里,我想做的是: 我在不同的帖子上看到了回调函数,但是它不适用于我想做的事情。 问题答案: 我在不同的帖子上看到了回调函数,但是它不适用于我想做的事情。 是的,您只需要更改对代码的思考方式即可。与其编写,不如编写一个名为的函数: 然后,而不是这样写: 您可以这样写: 现在,您可能会问自己,在那之后还有其他事情吗?好吧,您需要修改函数使其行为类似于和而

  • 问题内容: 我的日志显示此异常:由以下代码触发: 我试图弄清楚String.split返回空数组的条件。我的理解是,如果找不到匹配项,则返回大小为1且与原始字符串匹配的数组。 这是为Android build SDK版本21编译的Java。我期待听到我遗漏的明显细节。 问题答案: 返回结果的地方是。现在根据文档(限制由表示) 如果为零,则将尽可能多地应用该模式,该数组可以具有任何长度,并且 尾随的

  • 因此,我正在构建一个云函数,它接受customerID,根据customerID过滤文档,并返回文档列表。遗憾的是,它返回一个空数组。我相信这是一个简单的解决办法。 以下是云功能: 下面是我从客户端调用它时的代码。 此外,这里是一个萤火虫的屏幕截图。 firestore的截图

  • 我想用C++做一个简单的函数来练习一下。它应该做与python中的range()函数相同的事情,但现在要简单得多。我遇到了一个问题,数组没有正确地从函数返回到主函数。我曾经在下面编码,得到了一个奇怪的错误。有人知道问题出在哪里吗?

  • 在我的代码中,list数组的console.log给了我想要的东西,它是输入的一组子集。但它不会传递给结果。结果返回如下所示:[[],[],[],[],[],[],[],[],[],[],[],[],[]] 下面是我的代码: 任何想法都会很棒!谢谢你!

  • 本文向大家介绍python 解决函数返回return的问题,包括了python 解决函数返回return的问题的使用技巧和注意事项,需要的朋友参考一下 定义一个带返回值的函数,需要使用return语句在调用这个函数时返回一个目标值,当没有return时,函数默认返回None。 分析下面两个程序: out: 2017-9-25 out: 2017-9-25 None 对于第一个程序,仅仅调用了'no

  • C++ 数组 C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:int * myFunction() { . . . } 另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 现在,让我们来看下面的函数,它会生成 10 个随机数,并

  • 问题内容: 在SO中多次问过这个问题。但是我还是收不到东西。 我想从回调中获得一些价值。请看下面的脚本进行澄清。 如果我尝试返回该值,则只是“未定义”。我遵循了SO的一些想法,但仍然失败。 那些是: 问题答案: 这是不可能的,因为您无法从同步方法内部的异步调用返回。 在这种情况下,您需要将回调传递给foo,该回调将接收返回值 问题是,如果内部函数调用是异步的,则所有“包装”此调用的函数也必须是异步