2017-05-21 31 views
0

この関数を実行すると、mysqlクエリーの中に戻り値があるため、戻ってくるとnullになるのですがどうすれば解決できますか?javascript mysql inside function

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 .. callbacksが答えです。 –

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