2017-02-23 81 views
0

我必須從nodejs/express應用程序中的多個mdb文件中讀取數據。
我能做到這一點的一個文件,並回送響應:通過nodejs合併異步回調導致一個響應

var ADODB = require('node-adodb'); 

app.get('/data', function (req, res) { 
    db = "mydb.mdb" 
    var connection = ADODB.open('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + db); 
    var query = 'SELECT * FROM [MyTable]'; 
    connection 
    .query(query) 
    .on('done', function (data) { 
     r = JSON.stringify(data, null, ' '); 
     res.end(JSON.stringify(r, null, ' ')); 
    }) 
    .on('fail', function (data) { 
     res.end(JSON.stringify(data, null, ' ')); 
    }); 
}) 

現在我有一個數據庫名稱列表來做到這一點。
如果我對數據庫名稱執行for loop,如何合併所有.on('done')回調中的單個res.end(allData)響應?

回答

0

使用Promise.all(數組)其中參數是一個異步承諾列表。結果將成爲所有響應的列表,順序與數組中的承諾相同。

app.get('/data', function(req, res) { 
    .. //Set up the promises 
    var promise1 = connecetion.query(string); 
    var promise2 = connecetion.query(string); 

    Promise.all([promise1, promise2]).then(function(result) { 
    res.send(result); 
    }).catch(function(error) { 
    res.status(500).send(error); 
    }); 
}); 
+0

我測試過,但也許我錯過了一些東西。我有這個結果:'[ { 「domain」:null, 「_events」:{}, 「params」:{ 「connection」:「Provider = Microsoft.ACE.OLEDB.12.0; Data Source = A .MDB」, 「SQL」: 「SELECT * FROM [SessionData]」 } },{ 「域」:空, 「_events」:{}, 「PARAMS」:{ 「連接」: 「Provider = Microsoft.ACE.OLEDB.12.0; Data Source = B.mdb」, 「sql」:「SELECT * FROM [SessionData]」 } } ]' –

+0

未使用ADODB且文檔似乎是亞洲。不能讀它。 https://github.com/nuintun/node-adodb但是,你可能想嘗試使用bleubird promisify回調.. –

+0

這是一個很好的職位,如何承諾工作https://developers.google.com/web/基本面/入門/底線/承諾 –