2017-07-16 50 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(); 

});