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
回调错误要好吗?