2016-04-18 2 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-запроса.

Моя проблема заключается в том, что эта функция всегда возвращает 0 при отправке информации моему клиенту (через socket.io). Как дождаться обещания запроса перед возвратом результата?

Для 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' сам возвращает обещание, поэтому просто верните это. Использование отложенных таким образом является анти-шаблоном. – CodingIntrigue

+0

@RGraham Спасибо, я не заметил, что единственное, что нужно сделать, это вернуть результат обещания. Я исправил свой ответ – buddy123

Смежные вопросы