Node.js 如何访问node js(带postgresql的node js)中函数外的变量值

Node.js 如何访问node js(带postgresql的node js)中函数外的变量值,node.js,postgresql,Node.js,Postgresql,“console.log()”在函数内部调用,给出正确的结果数组,但在函数外部,同一数组变量显示一个空数组。我已经尝试了很多方法,比如回调,在node js中承诺功能,但是在功能之外看不到结果“res”。 请建议我如何从函数外部访问“res”变量 注意:具体来说,我需要“console.log(res)”在上述代码中提到的函数之外打印“res” res变量确实可以在函数外部访问,因为它是在函数外部定义的 res变量实际上是在函数外部填充的,因为它被看作是在函数内部填充的 问题的根本原因是外部打印

console.log()”在函数内部调用,给出正确的结果数组,但在函数外部,同一数组变量显示一个空数组。我已经尝试了很多方法,比如回调,在node js中承诺功能,但是在功能之外看不到结果“res”。 请建议我如何从函数外部访问“res”变量


注意:具体来说,我需要“console.log(res)”在上述代码中提到的函数之外打印“res”

res变量确实可以在函数外部访问,因为它是在函数外部定义的

res变量实际上是在函数外部填充的,因为它被看作是在函数内部填充的

问题的根本原因是外部打印按时间顺序早于内部活动,因为函数是异步的,所以调用会立即发出,并继续执行代码中的最后一行

如果你只是对获取外部价值很挑剔,那么情况确实如此

如果只想在外部打印值,请使用延迟回调来打印内容

如果要在外部对值进行后期处理,则需要通过同步原语将connect函数与下一个函数链接起来


希望这有帮助。

res变量确实可以在函数外部访问,因为它是在函数外部定义的

res变量实际上是在函数外部填充的,因为它被看作是在函数内部填充的

问题的根本原因是外部打印按时间顺序早于内部活动,因为函数是异步的,所以调用会立即发出,并继续执行代码中的最后一行

如果你只是对获取外部价值很挑剔,那么情况确实如此

如果只想在外部打印值,请使用延迟回调来打印内容

如果要在外部对值进行后期处理,则需要通过同步原语将connect函数与下一个函数链接起来


希望这能有所帮助。

如前所述,查询的结果只有在调用回调时才存在,因此在调用之前执行的部分代码中访问它是没有意义的。 看起来您需要阅读一些关于node异步编程的内容。
我建议您阅读有关承诺和生成器的内容。

如前所述,查询结果只有在启动回调时才存在,因此在调用之前执行的部分代码中访问它是没有意义的。 看起来您需要阅读一些关于node异步编程的内容。
我建议您阅读有关承诺和生成器的内容。

我终于找到了一个解决方案,我为db config创建了单独的文件,并使用回调函数导出了结果值数组。这是我创建的“db.js”文件

var pg = require('pg');
var conString = "postgres://postgres:abk@localhost/bot";

var res = [];

pg.connect(conString, function(err, client, done) {

    if(err) {
        return console.error('error fetching client', err);
    }
    client.query('SELECT * FROM bot.questions', function(err, result)  
    {

        done();

        if(err) {
            return console.error('error running query', err);
        }

        res.push(result.rows[0]);
        console.log(res);    //inside function scope
   });
});

console.log(res);    // outside function scope
我已经把它导入我的“app.js”中,如下面所示

var pg = require('pg');
var conString = "postgres://postgres:abk@localhost/chatbot";

var resp = [];

function executeQuery (callback) {

    pg.connect(conString, function(err, client, done) {
        if(err) {
            return console.error('error fetching client', err);
        }
        client.query('SELECT * FROM bot.questions', function(err, result) {

        done();

        if(err) {
            return console.error('error running query', err);
        }

        resp.push(result.rows[0]);
        // console.log(res);

        callback(resp);

       });
   });
};

exports.executeQuery = executeQuery;
这就是我现在可以访问“resp”作为结果数组的方式,并且可以在需要时将其作为参数传递给任何函数。 根据我的要求,需要将db配置文件与app.js文件分开,否则我知道它也可以在同一app.js文件中操作。 最后,这对我来说非常有效

这正是我所期待的例子。但我自己发现了


无论如何,谢谢你的参与和建议

我终于找到了一个解决方案,我为db config创建了一个单独的文件,以及使用回调函数导出的结果值数组。这是我创建的“db.js”文件

var pg = require('pg');
var conString = "postgres://postgres:abk@localhost/bot";

var res = [];

pg.connect(conString, function(err, client, done) {

    if(err) {
        return console.error('error fetching client', err);
    }
    client.query('SELECT * FROM bot.questions', function(err, result)  
    {

        done();

        if(err) {
            return console.error('error running query', err);
        }

        res.push(result.rows[0]);
        console.log(res);    //inside function scope
   });
});

console.log(res);    // outside function scope
我已经把它导入我的“app.js”中,如下面所示

var pg = require('pg');
var conString = "postgres://postgres:abk@localhost/chatbot";

var resp = [];

function executeQuery (callback) {

    pg.connect(conString, function(err, client, done) {
        if(err) {
            return console.error('error fetching client', err);
        }
        client.query('SELECT * FROM bot.questions', function(err, result) {

        done();

        if(err) {
            return console.error('error running query', err);
        }

        resp.push(result.rows[0]);
        // console.log(res);

        callback(resp);

       });
   });
};

exports.executeQuery = executeQuery;
这就是我现在可以访问“resp”作为结果数组的方式,并且可以在需要时将其作为参数传递给任何函数。 根据我的要求,需要将db配置文件与app.js文件分开,否则我知道它也可以在同一app.js文件中操作。 最后,这对我来说非常有效

这正是我所期待的例子。但我自己发现了


无论如何,谢谢你的参与和建议

我明白你说的话。我不想使用延迟回调。你能用同样的例子解释一下我如何将这个“res”传递给其他具有特定数组值的函数吗。我关心的是我想让“res”在文件中的任何函数中都可以访问。但是我该怎么做呢?正如我前面提到的,我尝试了回调函数来访问相同的“res”值,但无法做到这一点。请给我一个例子,考虑到我的情况,我如何将这个“res”传递给其他函数。
app.post('/results/',function(req,res){}
我有这个函数,我需要传递那个“res”请告诉我该怎么做?我理解你说的。我不想使用延迟回调。你能用我的相同示例解释我如何将这个“res”传递给其他具有特定数组值的函数吗。我关心的是我想使“res”可在文件中的任何函数中访问。但我如何做到这一点?正如我前面提到的,我尝试了回调函数来访问相同的“res”值,但无法做到这一点。请在这里给出一个例子,考虑到我的情况,我如何将此“res”传递给其他函数。
app.post('/results/',function(req,res){
我有这个函数,我需要将“res”传递给这个函数。请告诉我怎么做?