2016-07-25 22 views
-1

Ich habe diese Funktion, um eine Verbindung zu meiner DB und konsultieren Sie etwas darin.Übergeben Sie Ergebnis von einer Funktion an eine andere Funktion auf Nodejs

Jetzt muss ich das Ergebnis in andere Variable, um es in anderen Funktionen innerhalb meiner JS-Datei zu verwenden. Wie kann ich diesen Wert erhalten, ohne Code in die Variable zu bekommen?

+2

Sie nicht das tun kann. Sie müssen überall Callbacks oder Versprechen verwenden. http://blog.slaks.net/2015-01-04/async-method-patterns/ – SLaks

+0

ich benutze calbacks in der Funktion getID, aber vielleicht mache ich etwas falsch mit diesen Callbacks –

+0

Sie müssen den Wert von Ihrer Funktion zurückgeben einen Rückruf auch verwenden. – SLaks

Antwort

0

Ihr function conn (text) ruft Daten mithilfe von Rückrufen ab, Sie müssen dieses Muster bis zum verbrauchenden Code übertragen. Ich bin mir nicht sicher, was die „andere Funktionen“ aussehen, aber wir so tun, als man sieht wie folgt aus:

function awesomeFunction() { 
    var sweetResult = conn('sweet nickname'); 
    alert(sweetResult); 
} 

conn wird eine Abfrage an Ihre DB verbinden und auszustellen. Sie tun nicht wollen alles andere stoppen und warten auf das Ergebnis zurückkommen, möchten Sie die DB-Bibliothek, um Sie aufzurufen, wenn es Ergebnisse hat, daher die Rückrufe. Da die Datenbank nicht alles stoppt, kehrt die Steuerung zu Ihrer conn-Funktion und dann zurück zu awesomeFunction zurück und geht zur nächsten Zeile alert(sweetResult) über. Aber warte! Sie haben nichts von conn zurückgegeben, aber noch wichtiger, die Datenbank hat noch nicht einmal mit Ergebnissen zurückgerufen!

So müssen Sie awesomeFunction mehr wie folgt aussehen:

function awesomeFunction() { 
    conn('sweet nickname', function(err, sweetResult) { 
    alert(sweetResult); 
    }); 
} 

Was bedeutet, conn Bedürfnisse akzeptieren und einen Rückruf verwenden zu:

function conn (text, resultsAreInCB){ 
    ... 
    connection.query(queryString, function(err, rows, fields) { 
    var id; 
    connection.end(); 
    if (err){ 
     resultsAreInCB(err, null); 
    } else { 
     for (var i in rows) { 
     id = rows[i].idUsuario; 
     } 
     callback(null, id); 
    } 
    }); 
    ... 
}; 
+0

Danke !, es funktioniert perfekt. Nach dem Test auf meinem Code habe ich verstanden, wie es funktioniert. –