通过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);
});
});
我测试过,但也许我错过了一些东西。我有这个结果:'[ { “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]” } } ]' –
未使用ADODB且文档似乎是亚洲。不能读它。 https://github.com/nuintun/node-adodb但是,你可能想尝试使用bleubird promisify回调.. –
这是一个很好的职位,如何承诺工作https://developers.google.com/web/基本面/入门/底线/承诺 –