2016-04-18 142 views
-1

我正在創建一個節點服務器,它可以幫助我管理數據庫。我創造了多少元素在數據庫中有一定的隊列表內的概覽,我使用下面的函數:返回值前等待承諾

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但我與巴貝爾transpiling,即爲什麼我不使用SQL查詢的模板文字。

我的問題是,當將信息發送到我的客戶端(通過socket.io)時,此函數始終返回0。如何在返回結果之前等待查詢的承諾?

對於SQL我使用node-mssql

回答

1

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 
    } 
    ); 

這與IO和承諾/一般異步代碼的node.js常見的做法

+0

正是我想要成就的,謝謝! – Marv

+2

'sql.Request'本身返回一個promise,所以只需返回它。以這種方式使用延遲是一種反模式。 – CodingIntrigue

+0

@Rraham謝謝,我沒有注意到唯一要做的就是返回承諾的結果。我修復了我的答案 – buddy123