Javascript 合并异步回调将导致使用nodejs的单个响应
我必须从nodejs/express应用程序中的多个mdb文件中读取数据。Javascript 合并异步回调将导致使用nodejs的单个响应,javascript,node.js,express,Javascript,Node.js,Express,我必须从nodejs/express应用程序中的多个mdb文件中读取数据。我可以使用一个文件读取数据,并返回响应: 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 =
我可以使用一个文件读取数据,并返回响应:
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循环
,如何将所有.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);
});
});
我试过了,但也许我遗漏了什么。我有这样一个结果:
[{“域”:null,{u事件”:{},“参数”:{“连接”:“提供程序=Microsoft.ACE.OLEDB.12.0;数据源=A.mdb”,“sql”:“从[SessionData]“}},{“域”:null,{“事件”:{},“参数”:{“连接”:“提供程序=Microsoft.ACE.OLEDB.12.0;数据源=B.mdb”,“sql”:“SELECT*FROM[SessionData]”}]
从未使用过ADODB,文档似乎是亚洲的。我看不懂。但是您可能想尝试使用bleubird来提示回调。这是一篇关于承诺如何工作的精彩文章,我正在他的代码中寻找复制query:function(params)
,但是我一直在使用新的ActiveXObject('ADODB.Connection')
。他是如何使用它的?他使用spawn
运行带有ADODB
ActiveX对象的js脚本。我在proxy.js
中更改了代码以使用spawnSync
,现在我有了一个同步读取。