JavaScript/node.js:尝试访问某个函数之外的对象属性时获取 NULL

Posted

技术标签:

【中文标题】JavaScript/node.js:尝试访问某个函数之外的对象属性时获取 NULL【英文标题】:JavaScript/node.js: Getting NULL when trying to access an object's property outside a certain function 【发布时间】:2015-04-07 21:38:59 【问题描述】:

我有下面的代码 sn-p,它实际上是一个对 SQL 数据库进行查询的函数(为此使用了 tedious)。 我想要的只是从数据库中获取数据并在网页上使用它们。 问题是:在 request.on()... 我正在调用 date.setMyData() 函数。仍然在 request.on('row', function(columns)....如果调用 console.log(date.getMyData()) 它成功返回我的数据。

但是,如果尝试在 request.on('row', function(columns) 之外调用 date.getMyData ...我得到 NULL ... 这里有什么我遗漏的吗?

  var date = new DBData();

    function executeStatement() 
  request = new Request(queryString, function(err, rowCount) 
    if (err) 
      console.log(err);
     else 
     console.log(rowCount + ' rows');
    
    connection.close();
  );

  request.on('row', function(columns) 

   columns.forEach(function(column) 
      if (column.value === null) 
        console.log('NULL');
       else 
          date.setMyData(columns);


          //WHY THIS CODE RETURNS MY DATA?
          console.log(date.getMyData()); 

      
    );
  );

  request.on('done', function(rowCount, more) 
    console.log(rowCount + ' rows returned');
  );

  connection.execSql(request);


function DBData()
    var myData = null;

    this.setMyData = function(obiect)
        myData = obiect;
    ;

    this.getMyData = function()
        return myData;
    ;
;

 console.log(date.getMyData()); //WHY I GET 'NULL' HERE?

【问题讨论】:

如果Request 是异步的,它将在自己的时间内完成,在console.log() 之后调用setMyData()。相关:Why is my variable unaltered after I modify it inside of a function? 【参考方案1】:

当您运行该代码时,执行顺序将是

var date = new DBData()
console.log(date.getMyData()) //  null at this point

// end of execution

函数 executeStatement() 被定义,但它没有立即执行。当您调用它时,它可能会在稍后执行,此时它将填充您的“var date”,因此当您在回调中使用 console.log(date.getMydata()) 时,它将正确显示正确的数据执行语句()。

【讨论】:

以上是关于JavaScript/node.js:尝试访问某个函数之外的对象属性时获取 NULL的主要内容,如果未能解决你的问题,请参考以下文章

javascript node.js访问postgresql数据库

如何在 Javascript/Node.js 中访问函数的结果 [重复]

javascript node.js next()

javascript / node.js中的睡眠功能[重复]

在 javascript/node.js 中连接到 Gmail IMAP API

Solana - 如何从 JavaScript / Node.js 中的本地密钥对获取帐户?