2017-05-21 84 views
0

當我運行這個函數時,它返回時返回null,因爲我在mysql查詢中有返回值,我該如何解決這個問題?功能裏面的javascript mysql

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

該函數是async ..回調是答案。 –

+1

可能的重複[如何返回來自異步調用的響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

回答

0

connection.query是一個異步函數,所以CheckStorage在connection.query完成之前返回。您需要將處理查詢結果的回調函數傳遞給CheckStorage,然後在查詢結束時調用該函數。

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"]); 
      } 
     } 
    }); 
}