Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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 Node.js-mongoose承诺-循环通过_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Node.js-mongoose承诺-循环通过

Javascript Node.js-mongoose承诺-循环通过,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我在node.js中使用mongoose时遇到问题。在我的模型中,我只有组主管的ID,在这个路由中,我还想将supervisorName添加到变量中(这个名称存储在组模型中)。所以,是的,我读过一些关于承诺的书,但我仍然不知道如何解决这个问题。(基本上,我只想遍历所有组,从mongodb获取它们的模型,并为每个组分配主管名称) 您可以将您的组数组映射到承诺数组中,并使用Promise.all解决所有问题 router.get('/manage', function(req, res, next)

我在node.js中使用mongoose时遇到问题。在我的模型中,我只有组主管的ID,在这个路由中,我还想将supervisorName添加到变量中(这个名称存储在组模型中)。所以,是的,我读过一些关于承诺的书,但我仍然不知道如何解决这个问题。(基本上,我只想遍历所有组,从mongodb获取它们的模型,并为每个组分配主管名称)


您可以
将您的组数组映射到
承诺数组中,并使用
Promise.all
解决所有问题

router.get('/manage', function(req, res, next) {
    Group.find({})
    .exec() // 1
    .then(groups => {
        return Promise.all(groups.map(group => { // 2, 3
            return Group.findById(group.supervisor)
            .exec()
            .then((supervisor) => { // 4
                group.supervisorName = supervisor.name;
                return group;
            });
        }));
    })
    .then(propGroups => {
        res.render('groups/groups_manage', {groups : popGroups});
    });
});
说明:
  • Mongoose模型方法支持回调和承诺接口。但是,要使用promise接口,我们需要使用
    exec
    方法并删除回调
  • 承诺。所有
    都包含一系列承诺。它等待所有问题得到解决,并等待任何问题被拒绝(给出错误)。注:承诺是并行执行的
  • 我们有一个
    group
    对象数组,我们将它们映射为承诺。调用
    .findById
    ,然后再次使用
    exec
    从中获得承诺注意:记住要回报你的承诺
  • 我们更新对象,并将其作为promise的最终结果返回
    还有一个信息,主管是另一个组;哇,你让我开心,你能解释我为什么要这样做吗?(请对代码或其他内容发表意见)请添加如何处理两个操作?例如,
    findById
    并通过
    OtherModel.countDocuments
    计算此元素在另一个集合中被引用的频率?
    router.get('/manage', function(req, res, next) {
        Group.find({})
        .exec() // 1
        .then(groups => {
            return Promise.all(groups.map(group => { // 2, 3
                return Group.findById(group.supervisor)
                .exec()
                .then((supervisor) => { // 4
                    group.supervisorName = supervisor.name;
                    return group;
                });
            }));
        })
        .then(propGroups => {
            res.render('groups/groups_manage', {groups : popGroups});
        });
    });