pg-promise:在订单重要的情况下获得多个结果集的最佳方法是什么

时间:2018-01-01 17:17:03

标签: node.js promise pg-promise

这是我的天真代码:

db.projects.find_one(project_id, user_id)
        .then(project => {
            if (!project) {
                req.flash('info', 'Project not found');
                res.redirect('./projects');
            } else {
                db.codifier.get(project.project_id)
                    .then(codifier => {
                        codifier = build_codifier(codifier);
                        res.render('project', {project: project, codifier: codifier})
                    })

            }
        })

所以基本上,我想得到一个项目,如果找到了 - 我想收集一些相关数据,这是编码器,进入单独的结果集,所以我可以使用{project:project,codifier:codifier进行渲染}。

我知道嵌套的.then语句似乎很糟糕......有没有更好的方法呢?谢谢!

1 个答案:

答案 0 :(得分:1)

  

我知道嵌套的.then语句似乎很糟糕......有没有更好的方法呢?谢谢!

这很糟糕,因为您不重复使用数据库连接,为每个查询请求一个新连接。您应该使用tasks分享跨查询的连接。

请参阅Chaining Queries

向数据库存储库类添加另一个方法的示例:

getCodifier(project_id, user_id) {
    // use the repository object object
    return this.db.task(t => {
        // you can access repository methods on the context here:
        return t.projects.find_one(project_id, user_id)
            .then(project => {
                if (project) {
                    return t.codifier.get(project.project_id)
                }
            });
    });
}

或者,如果它不可重复使用,您可以在需要的地方执行任务。