Sql server 在返回值之前等待承诺
我正在创建一个节点服务器,它可以帮助我管理数据库。我正在创建数据库中某个队列表中有多少元素的概述,为此我使用以下函数:Sql server 在返回值之前等待承诺,sql-server,node.js,ecmascript-6,Sql Server,Node.js,Ecmascript 6,我正在创建一个节点服务器,它可以帮助我管理数据库。我正在创建数据库中某个队列表中有多少元素的概述,为此我使用以下函数: var getRowCount = function(table) { var result = 0; new sql.Request() .query('SELECT COUNT(*) AS count FROM Queue_' + table) .then(function(recordset) { r
var getRowCount = function(table) {
var result = 0;
new sql.Request()
.query('SELECT COUNT(*) AS count FROM Queue_' + table)
.then(function(recordset) {
result = recordset[0].count;
})
.catch(err => console.dir(err));
return result;
};
注意:我使用的是ES6,但使用的是Babel,这就是为什么我没有在SQL查询中使用模板文字
我的问题是,当将信息发送到我的客户端(通过socket.io)时,该函数总是返回0
。在返回结果之前,我如何等待查询的承诺
对于我正在使用的SQL,SQL查询是一种承诺,因此只需正确处理它:
var getRowCount = function(table) {
return new sql.Request().query('SELECT COUNT(*) AS count FROM Queue_' + table);
};
然后,从外部看,您将以以下方式使用它:
getRowCount(myTable).then(
function (recordset) {
// send result here
},
function (err) {
// send error here
}
);
这是node.js中IO和promises/async代码的常见做法,这正是我想要实现的,谢谢
sql.Request
本身返回一个承诺,所以只需返回该承诺即可。以这种方式使用deferred是一种反模式。@RGraham谢谢,我没有注意到唯一要做的事情就是返回承诺的结果。我修好了我的衣服answer@buddy123不完全是<代码>返回新的sql.Request().query(…).then(函数(){返回日志(表,记录集[0].count);})它实际上是从日志返回值function@buddy123您认为catch
比then
回调错误要好吗?