2016-04-18 17 views
-1

Ich erstelle einen Knotenserver, der mir hilft, eine Datenbank zu verwalten. Ich schaffe einen Überblick, wie viele Elemente in einer bestimmten Queue-Tabelle in der Datenbank, für die ich die folgende Funktion bin mit:Warten auf Versprechen, bevor Wert zurückgegeben wird

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

Hinweis: Ich verwende ES6 aber bin transpiling mit Babel, das heißt Warum verwende ich keine Template-Literatur für die SQL-Abfrage?

Mein Problem ist, dass diese Funktion immer 0 zurückgibt, wenn ich die Informationen an meinen Client sende (über socket.io). Wie warte ich auf das Versprechen der Abfrage, bevor ich das Ergebnis zurücksende?

Für die SQL Ich bin mit node-mssql

Antwort

1

SQL-Abfrage ist ein Versprechen, es ist so einfach handhaben richtig:

var getRowCount = function(table) { 
    return new sql.Request().query('SELECT COUNT(*) AS count FROM Queue_' + table); 
}; 

Dann von außen, können Sie es auf folgende Weise verwenden würde:

getRowCount(myTable).then(
    function (recordset) { 
     // send result here 
    }, 
    function (err) { 
     // send error here 
    } 
    ); 

Dies ist die übliche Praxis bei IO und Versprechungen/Asynchron-Code im allgemeinen in node.js

+0

Genau das, was ich erreichen wollte, danke! – Marv

+2

'sql.Request' selbst gibt ein Versprechen zurück, also gib das einfach zurück. Die Verwendung von Deferred auf diese Weise ist ein Anti-Pattern. – CodingIntrigue

+0

@RGraham Danke, ich habe nicht gemerkt, dass das einzige Ergebnis das Versprechen ist. Ich habe meine Antwort – buddy123

Verwandte Themen