通过nodejs合并异步回调导致一个响应

问题描述:

我必须从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)响应?

使用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/基本面/入门/底线/承诺 –