【问题标题】:Cannot get return array from javascript function reading from sql database [duplicate]无法从从 sql 数据库读取的 javascript 函数中获取返回数组 [重复]
【发布时间】:2016-07-17 08:30:19
【问题描述】:

我已通过代码进行调试以检查以确保我从 node.js 中的 sql 连接获取数据。但我无法让这个函数返回结果。当循环遍历行时,它会将项目添加到数组中,但我注释了值显示正确的行...为什么这个函数返回一个空白数组 []?

function execute_stp_getconfigurationsbyuserid(userid, callback)
{
    var results = [];
    var Connection = require('tedious').Connection;
    var config = {
    };

    function item(id,name)
    {
        this.id = id;
        this.name = name;

        return this;
    }

    var Request = require('tedious').Request
    var TYPES = require('tedious').TYPES;

    var connection = new Connection(config);

    var myCallback = function(err,data){
        connection.on('connect', function(err) {

            var request = new Request("stp_GetConfigurationsByUserId @UserId", function(err) {
                if (err) {
                    console.log(err);}
            });

            request.addParameter('UserId', TYPES.Int, userid);

            request.on('row', function(columns) {
                var itm = new item(columns[0].value, columns[2].value);
                results.push(itm);
                //HAS THE CORRECT VALUE HERE
                console.log(results);
            });

            request.on('done', function(rowCount, more) {
                console.log(rowCount + ' rows returned');
                myCallback(null,results);
            });

            connection.execSql(request);

        });
    }

}

调用函数:

router.get('/getuserconfigurations', function(req, res, next) {
    var config_ddl = execute_stp_getconfigurationsbyuserid(1);
    console.log("Getting user configurations....")
    console.log(config_ddl);
    res.send(JSON.stringify(config_ddl));
});

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    节点异步工作。到执行返回结果时,上述语句不需要完成。尝试使用回调来传递/处理数据。 参考这个链接nodeJs callbacks simple example

    编辑:代码可以修改为

    var callback = function(err, data){
      console.log(data);
    }
    
    function execute_stp_getconfigurationsbyuserid(userid, callback)
    {
        var results = [];
        var Connection = require('tedious').Connection;
        var config = {
        };
    
        function item(id,name)
        {
            this.id = id;
            this.name = name;
    
            return this;
        }
    
        var Request = require('tedious').Request
        var TYPES = require('tedious').TYPES;
    
        var connection = new Connection(config);
    
     
      connection.on('connect', function(err) {
    
        var request = new Request("stp_GetConfigurationsByUserId @UserId", function(err) {
          if (err) {
            console.log(err);}
        });
    
        request.addParameter('UserId', TYPES.Int, userid);
    
        request.on('row', function(columns) {
          var itm = new item(columns[0].value, columns[2].value);
          results.push(itm);
          //HAS THE CORRECT VALUE HERE
          console.log(results);
        });
    
        request.on('done', function(rowCount, more) {
          console.log(rowCount + ' rows returned');
          callback(null,results);
        });
    
        connection.execSql(request);
    
      });
       
    
    }

    【讨论】:

    • 你能告诉我如何使用我拥有的东西吗?
    • var myCallback = function(err, data){ console.log(data); }request.on('done', function(rowCount, more) { console.log(rowCount + ' rows returned'); myCallback(null,results); });调用这个myCallback
    • 还是不行。
    • 您可以在修改完成后编辑问题吗?这样我就明白了。
    • 是的,我可以。我已经更新了代码。如果您还没有意识到,我对这些东西很陌生。
    猜你喜欢
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多