2016-11-16 2 views
0

Das Konzept der Versprechen ist sehr neu für mich (bisher arbeitete ich mit async.each und async.waterfall) Ich möchte Versprechungen verwenden, aber ich bin richtig fest jetzt.SELECT mehrere Daten von MySQL node.js mit Versprechungen

Ich möchte "Tags" von meinem db bekommen. Ich habe zwei Tabellen dafür: Eine namens "Tags" mit jedem Tag (mit einer ID) und eine andere "user_tags" mit jedem Benutzernamen gespeichert und die ID des Tags, dass der Benutzer (Benutzername) erstellt und gespeichert in ' Stichworte'.

Ich kann Informationen in meiner DB setzen, aber jetzt will ich das herausziehen und melden Sie es heraus (ich werde es später anzuzeigen)

Bisher ist dies meine Idee:

var getUserprofile = function getUserprofile(username, callback){ 
    pool.getConnection(function (err, connection) { 
    var dataUser = []; 

    // Error check 
    if (err) { 
     console.log(err); 
    } 

    connection.query('SELECT * FROM users_tags FULL JOIN tags ON (tags.id = users_tags.t_id) WHERE users_tags.user_id=666;', username , function (err, rows, fields) { 
     if (err) { 
     connection.release(); 
     cb(err); 
     } else if (rows.length < 1) { 
     connection.release(); 
     cb("We don't have any informations about this user yet"); 

     } else { 
     console.log("we pull the information right now"); 
     connection.release(); 
     callback(null, rows[0]); 
     } 
    }); 
    }); 
} 

Ist die eine gute Idee ? Was soll ich tun, wenn ich Versprechungen für diese Art von Funktion verwenden möchte? Vielen Dank im Voraus für jede Hilfe !!!

Antwort

0

Ich würde Bluebird verwenden. Sie können vorhandene APIs mit Promise.promisify oder Promise.promisifyAll "promisifizieren".

ich so etwas wie

var Promise = require('bluebird'), 
    ... //other deps; 

var pool = Promise.promisifyAll(pool); 
function getUserprofile(username){ 
    var connection = null; 
    return pool.getConnectionAsync() 
     .then(function (conn) { 
      connection = Promise.promisifyAll(conn); 
      return connection.queryAsync('...'); 
     }) 
     .then(function (results) { 
      if (results.length < 1) { 
       return "We don't have any informations about this user yet"; 
      } else { 
       console.log("we pull the information right now"); 
       return results[0]; 
      } 
     }) 
     .catch(function (err) { 
      console.log(err); 
      throw err; 
     }) 
     .finally(function() { 
      if (connection) { 
       connection.release(); 
      } 
     }); 
} 
+0

Hallo tun würde, vielen Dank für Ihre Hilfe, hatte keine Ahnung von drossel. Ich überprüfe es gerade jetzt. Aber es gibt etwas Seltsames für mich in deiner Antwort, deine Verbindung zur Datenbank sieht überhaupt nicht wie meine aus. Ich verstehe es nicht wirklich. Es ist ein Muss ? Warum meins ist dann nicht gut? Danke für Ihre Antwort. – pkerckho

+0

Ich habe einfach die promisifizierte Version ('getConnectionAsync') der API verwendet, um eine Verbindung zu erstellen. Was macht dir Schwierigkeiten? –

+0

Ich habe diese "pool.getConnection (function (err, connection)" - Methode für alle mein Projekt verwendet, wenn ich die (getConnectionAsync) -Methode benutze, bedeutet dies, dass ich alle meine Anfrage soweit richtig ändern muss? Ich habe bereits einen var-Pool deklariert – pkerckho