2017-05-21 3 views
0

Wenn ich diese Funktion ausführen, bekomme ich null, wenn es zurückkommt, weil ich die Rückkehr innerhalb der MySQL-Abfrage habe, wie kann ich das lösen?Javascript Mysql innerhalb Funktion

function CheckStorage(Host, Slots, SSLocation) { 
    connection.query("SELECT * FROM `machines` WHERE `shost` LIKE '" + Host + "' AND `location` LIKE '" + SSLocation + "' AND `slotsa` >= " + Slots + "", function(err, rows, fields) { 
     if(rows[0]) { 
      console.log(rows[0]["ip"]); 
      return rows[0]["ip"]; 
     } else { 
      return false; 
     } 
    }); 
} 
+0

Die Funktion ist async .. Callbacks ist die Antwort. –

+1

Mögliches Duplikat von [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

Antwort

0

connection.query ist eine asynchrone Funktion, daher wird CheckStorage zurückgegeben, bevor connection.query beendet wird. Sie müssen eine Rückruffunktion übergeben, die die Abfrageergebnisse an CheckStorage weitergibt, und diese Funktion dann aufrufen, wenn Ihre Abfrage abgeschlossen ist.

function CheckStorage(Host, Slots, SSLocation, callback) { 
    connection.query("SELECT * FROM `machines` WHERE `shost` LIKE '" + Host + "' AND `location` LIKE '" + SSLocation + "' AND `slotsa` >= " + Slots + "", function(err, rows, fields) { 
     if(rows[0]) { 
      console.log(rows[0]["ip"]); 
      if (typeof callback == "function") { 
       callback(rows[0]["ip"]); 
      } 
     } 
    }); 
} 
Verwandte Themen