在nodejs中以变量形式获取postgres-query的结果[英] Get the result of postgres-query as variable in nodejs

本文是小编为大家收集整理的关于在nodejs中以变量形式获取postgres-query的结果的处理方法,想解了在nodejs中以变量形式获取postgres-query的结果的问题怎么解决?在nodejs中以变量形式获取postgres-query的结果问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我知道以下代码在命令行上打印了我的查询结果:

query.on("row", function (row, result) {
  result.addRow(row);
});

query.on("end", function (result, callback) {
    println(JSON.stringify(result))
});

但是,我想将以下代码中的结果值用作变量,而不仅仅是将其打印到命令行.

更新:能够使用下一个查询的值是不够的,我希望它超出查询范围:

query.on("row", function (row, result) {
  result.addRow(row);
});

query.on("end", function (result, callback) {
    println(JSON.stringify(result))
});
//use the result here

提前感谢您的回答.

推荐答案

你有两个选择:

  • 如果你想继续使用基本驱动,你必须使用结果回调,然后嵌套它们以便在下一个查询中使用结果:

    connection.query(query1, values1, function(err1, result1) {
        // check if(err1) first, then:
        connection.query(query2, values2, function(err2, result2) {
            // check if(err2) first, then:
            connection.query(query3, values3, function(err3, result3) {
                // check if(err3) first, then:
                cb(result1, result2, result3);        
            });
        });
    });
    
  • 另一种方法是使用承诺(pg-promise)当您可以像这样链接调用时:

    db.query(query1, values2)
        .then(data => {
            return db.query(query2, values2);
        })
        .then(data => {
            return db.query(query3, values3);
        })
        .catch(error => {});
    

虽然在这种情况下 pg-promise 的正确方法是通过方法 task:

db.task(t => {
    const result = {};
    return t.query(query1, values1)
        .then(data => {
            result.a = data;
            return t.query(query2, values2);
        })
        .then(data => {
            result.b = data;
            return t.query(query3, values3);
        });
        .then(data => {
            result.c = data;
            return result;
        });
})
    .than(data => {
        // data = {a, b, c}
    })
    .catch(error => {});

第二种方法在一次执行多个查询时自动让您访问 ES6 和 ES7 的现代语法,您可以这样做:

对于 ES6:

db.task(function * (t) {
    let a = yield t.query(query1, values1);
    let b = yield t.query(query2, values2);
    let c = yield t.query(query3, values3);
    return {a, b, c};
})
    .than(data => {
        // data = {a, b, c}
    })
    .catch(error => {});

对于 ES7/Babel:

db.task(async t => {
    let a = await t.query(query1, values1);
    let b = await t.query(query2, values2);
    let c = await t.query(query3, values3);
    return {a, b, c};
})
    .than(data => {
        // data = {a, b, c}
    })
    .catch(error => {});

本文地址:https://www.itbaoku.cn/post/1764170.html