2017-07-16 53 views
0

我在db.js下面的代码片段,如何从不同的Node.js代码

exports.asyncGetAllData = function() { 
     connection.connect(function(err) { 
      connection.query(sqlGetAllData, function (err, result) { 
       if (err) reject(err); 
       else 
       { 
        //console.log(result); 
       } 
       }); 
      }); 
}; 

获取数据,我想要得到的结果数据,当我在调用的函数app.js如下。您可以看到,当我试图从db.js中获取数据时,它在控制台窗口中显示“数据未定义”。我该如何解决这个问题?任何建议?

由于提前,

+0

看看[这里](https://stackoverflow.com/questions/23339907/returning-a-value-from-callback-function-in-node-js)。 –

回答

1

要做到这一点,最简单的方法是创建您传递给asyncGetAllData()

一个回调函数

您的功能看起来更像这样:

exports.asyncGetAllData = function (callback) { 
    connection.connect(function(err) { 
     connection.query(sqlGetAllData, callback) 
    }) 
} 

然后在y欧app.js您传递回调:

db_connection.asyncGetAllData(function(err, result{ 
    if (err) reject(err); 
    else 
    { 
      //console.log(result); 
    } 
}) 

你也可以调整asyncGetAllData返回一个承诺,这可能让事情变得更漂亮。

2

看起来你都在呼吁使用异步方法的数据,而不是等待响应。

var data = db_connection.asyncGetAllData(); //data is undefined 
console.log(data); 

要么使用,将让你SyncData或使用回调作为一个功能:

exports.asyncGetAllData = function (cb) { 
    connection.connect(function(err) { 
     connection.query(sqlGetAllData, function (err, result) { 
      if (err) reject(err); 
      else 
      { 
       //console.log(result); 
       cb(data); 
      } 
      }); 
     }); 
}; 

var data = db_connection.asyncGetAllData(function(data) { 
    console.log(data); 
    res.write(JSON.stringify(data)); 
    res.end(); 

});