2014-05-19 183 views
-1

我一直在嘗試使用this module來嘗試使用回調函數返回一個值。Lua - 如何從mysql回調函數中返回一個值?

我覆蓋了默認的GetPData函數,它從本地sql數據庫中檢索數據,但我想從MySQL數據庫服務器中檢索它。

這裏是原來的功能:

--[[--------------------------------------------------------- 
GetPData 
- Saves persist data for this player 
-----------------------------------------------------------]] 
function meta:GetPData(name, default) 

    name = Format("%s[%s]", self:UniqueID(), name) 
    local val = sql.QueryValue("SELECT value FROM playerpdata WHERE infoid = " .. SQLStr(name) .. " LIMIT 1") 
    if (val == nil) then return default end 

    return val 

end 

這裏是我試過的代碼:

function Player:GetPData(key, default) 

    testget(self,key,default,function(junk) 
    //LocalPlayer():ChatPrint("You have $" .. junk .. "."); 
    print(junk) 
    return junk 
    end) 

end 

function testget(self,key, default, callback) 
    local retVal = default 
    insertQ = PDataDB:query("SELECT `value` from `playerdata` WHERE `uniqueid`='" .. self:UniqueID() .. "' AND key` = '" .. key .. "';"); 
    insertQ.onError = DBError 
    insertQ.onData = function(self, data) 
     retVal = data.value or default 
     print(retVal) 
     print("--------------------------------------------------------------------------------------------------------------") 
    insertQ.onSuccess = function(self) 
     print(retVal) 
     callback(retVal); 
    end 
    insertQ:start() 
    end 

end 

這是一個遊戲叫蓋瑞模組。我需要跟蹤我的服務器上的xp。

+1

所以你現在要做些什麼? – hjpotter92

+0

該代碼返回一個零值,我正在嘗試修復它。它應該從我的mysql數據庫檢索數據,或者默認值是什麼。 – user3654333

+0

你的意思是對'GetPData'的調用應該返回這個值? – hjpotter92

回答

1

修改你的函數是這樣的:

function Player:GetPData(key, default) 
    local retVal = 0 -- or any other default value you want 
    testget(self, key, default, function(junk) 
     //LocalPlayer():ChatPrint("You have $" .. junk .. "."); 
     print(junk) 
     retVal = junk 
     return junk 
     end 
    ) 
    return retVal 
end 
+0

這不斷返回0.我覺得某些東西沒有在testget函數中運行。它從不打印出任何錯誤或打印出代碼中的檢查。 – user3654333

+0

@ user3654333是否正在執行'testget'函數?那裏的印刷品會輸出什麼東西? – hjpotter92

+0

在testget中沒有任何打印正在運行。 – user3654333