我爲我的服務器製作了一個事件監聽器,用於監聽某人何時嘗試登錄,所以我做了一個sql查詢,然後如果信息匹配,它會記錄它們上。問題在於,如果信息在運行查詢之前匹配,那麼它的測試將始終返回false。這裏是我的代碼函數在sql查詢完成之前運行,節點js
player.on('checkLogin', function(data)
{
var logIn = "";
connection.query({
sql: "SELECT * FROM users WHERE username = ?",
values: [data.user] },
function(error, results, fields)
{
if (error)
{
console.log(error);
}
if(results)
{
var pass = "";
for (i = 0; i < results.length; i++)
{
pass = (results[i].password);
}
var input = crypto.createHash('md5').update(data.pass).digest("hex");
if (pass == input)
{
logIn = true;
}
}
});
if (logIn == true)
{
this.em.emit('login',
{
id: player.playerid
});
}
}.bind(this));
聽說承諾會解決這個問題,但沒有解決這個簡單的方法?在此先感謝
這個問題一直在問。你需要在回調中回覆*。只需用'logIn = true;'代替你想在底部運行的任何代碼。 –
當它嘗試登錄時,我收到錯誤「can not read property'emit'undefined」 –