将数据变量填充到外部以便在函数调用之外使用

时间:2016-01-28 19:19:44

标签: node.js

我有下一个代码,用于使用pg-client获取某些数据:

exports.load_data_view = function (pg, pg_config, param, callback) {
    pg.connect(pg_config, function (err, pgClient, pgDone) {
        if (err) {
            console.log(err);
            res.end(500);
        }

        var query = 'some query...';
        data = [];

        pgClient.query(query, function (err, result) {
            pgClient.end();

            if (err) {
                callback(err, null);
                return;
            }

            data1 = [];

            for (var i = 0; i < result.fields.length; i++) {
                data1.push(result.fields[i]["name"]);
            }
            data.push(data1);

            callback(null, data);

        });
    }
)
}

当我需要使用数据时,我这样做:

for(somecolecction)
{
    data=[]

    exports.load_data_view(pg, pg_config, param, function (err, data) {
        console.log(data); //data is populated
    });


//DoSomethingWith data
    console.log(data) // data is empty


}

问题是:在调用内部,data包含我需要的所有内容,在块“DoSomethingWith data”中,data已丢失其所有值。我已经知道pgClient是异步的,但是,这种使用方法不应该解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

代码是异步的,因此第二个console.log在第一个之前被调用。

因此,如果您想对数据执行某些操作,请在第一个console.log所在的回调函数中执行此操作。