我正在尝试使用node-mssql从我的节点应用程序在远程 MS sql 服务器上执行存储过程。
问题:调用似乎是阻塞的,而不是异步的,因为除非第一个请求完成,否则从另一个客户端对应用程序的任何其他请求都不会得到响应。
sql.connect(config).then(function() {
new sql.Request()
.input('mysp', sql.TVP, tvp)
.execute('spParam1').then(function(recordsets) {
callback(null, recordsets[0]);
}).catch(function(err) {
callback(err, []);
});
}).catch(function(err) {
callback(err, []);
});
提到的“回调”是 api 期望的函数回调。
我尝试了一个简单的例子
setTimeout(function() {
callback("error.message", []);
}, 60000);
在这种情况下,两个客户端都工作,Node 为第二个请求返回线程。
我已经尝试过使用承诺、回调和流式传输的示例。所有最终都会阻塞 I/O。
我在这里俯瞰什么?
编辑:只使用查询而不是“执行”,它按预期工作,没有阻塞 i/o
dbConn.connect().then(function () {
logger.info("sql connection established")
var request = new sql.Request(dbConn);
// request.input('mysp', sql.TVP, tvp)
// .execute("spParam1").then(function (recordSet) {
request.query("WAITFOR DELAY '00:00:22'").then(function(){
dbConn.close();
callback("no data", []);
}).catch(function (err) {
callback(err, []);
logger.error(err)
dbConn.close();
});
}).catch(function (err) {
logger.error(err)
callback(err, []);
});