Javascript函数不返回查询结果

时间:2016-08-18 04:29:25

标签: javascript

我试图找出为什么我的一个查询不会从查询返回值...我的代码看起来像这样:

var client = new pg.Client(conString);
client.connect();

var query = client.query("SELECT count(*) as count FROM sat_scores")

// Don't use demo key in production. Get a key from https://api.nasa.gov/index.html#apply-for-an-api-key

function getNEO(callback) {
    var data = '';
    query.on('rows', function(rows) {
        console.log("Row count is: %s", rows[0].count)
        data += rows[0].count;
    });
    query.on('end', function() {
        callback(data);
    });
}

有了这个,getNEO返回一个空白...但如果我设置var data = '4',那么getNEO返回4 ....查询应返回128,但它只返回一个空白...

2 个答案:

答案 0 :(得分:1)

首先,getNEO()不会返回任何内容 - 我假设你只为getNEO()拨打query一次,并传入一个回调来处理数据,那回调就是得不到合适的数据?

我对此类问题进行故障排除的典型建议是简化代码,并尝试接近给定的任何示例代码(for instance):

var client = new pg.Client(conString);
// define your callback here, in theory
client.connect(function (err) {
    if (err) throw err;

    var query = client.query("SELECT count(*) as count FROM sat_scores"),
        function(err, result) {
            if (err) throw err;

            console.log(result.rows.length);
        }
    );
});

......我在这里做了几件你想要注意的事情:

  1. 看起来client.connect()方法是异步的 - 你不能只是连接然后运行你的查询,你必须等到连接完成,因此回调。查看代码时,它似乎可以在准备好发送查询时发出connect事件,因此您不必直接在connect()方法上使用回调。
  2. 我没有看到data事件in the documentation for the query object,也没有在代码中看到一个。您可以使用row事件,或者您可以直接在查询上使用回调,如主页上的示例所示 - 这就是我为了简单起见而在此完成的工作。
  3. 我没有看到您正在使用的count属性,row[0]只会是第一个结果 - 我认为您希望整个length属性{ {1}}数组如果您正在查找返回的行数。
  4. 我不知道你是否有充分的理由使用rows函数而不是直接将代码放在程序中,但我认为你可以更接近你所追求的内容:

    getNEO()

    ...所以,您可以随时调用var client = new pg.Client(conString); // define your callback here, in theory client.connect(); function getNEO(callback) { client.on('connect', function () { var query = client.query("SELECT count(*) as count FROM sat_scores")); query.on('end', function(result) { callback(result.rowCount); }); }); } 函数,它会适当地等待连接完成,然后您可以跳过跟踪每一行; getNEO()事件会收到end对象,该对象将为您提供所有行和行计数以用于您想要的内容。

答案 1 :(得分:-1)

所以这就是我能够解决问题的方法....我将var query移到了函数内部

function getNEO(state, callback) {
    var conString = "postgres://alexa:al@alexadb2.cgh3p2.us-east-1.redshift.amazonaws.com:5439/alexa";

    var client = new pg.Client(conString);
    client.connect();
    var data = '';
    var query = client.query("SELECT avg(Math) as math,  avg(Reading) as reading FROM sat_scores WHERE State = '" + state + "'");
    console.log("query is: %s", query);
    query.on('row', function(row) {
            console.log("Row cnt is: %s", row.math);
            console.log("row is: " + row)
            data += row;
        });
    console.log("made it");
    query.on('end', function() {
    callback(data);
        });
    }