Как сделать асинхронные функции в Lua? - PullRequest
0 голосов
/ 06 октября 2019

У меня есть запрос к базе данных в функции, которая возвращает результат этого запроса, а в другой функции я хочу получить этот результат, но я не знаю, как сделать эту асинхронность. Я использую библиотеку «mysqloo» https://github.com/FredyH/MySQLOO для запросов к базе данных.

Первая функция с запросом:

function meta:getMoney()
    local query2 = databaseObject:query("SELECT economy FROM luvinsastroi_player WHERE steamid = '" .. self:SteamID64() .. "' ")

    query2.onData = function( q, d)
        return tonumber(d['economy'])
    end
    query2:start()
end

затем:

hook.Add( "PlayerSay", "MoneyCommand", function( ply, text, team )
    if(text == "/money") then
        local money = ply:getMoney()
        ply:PrintMessage( HUD_PRINTTALK, "Vous avez " .. money .. "€." )
    end
end )

Во второй функции деньги равны нулю и так Error on ply:PrintMessage ( HUD_PRINTTALK, "Vous avez " .. money .. "€." ) attempt to concatenate a nil value (money)

Как ждать return tonumber(d['economy']) от функции meta:getMoney()?

1 Ответ

1 голос
/ 06 октября 2019

Это может сработать, но я не уверен:

function meta:getMoney(cb)
   local query2 = databaseObject:query("SELECT economy FROM luvinsastroi_player WHERE steamid = '" .. self:SteamID64() .. "' ")
   if cb then 
      query2.onData = function(q, d)
         cb(tonumber(d['economy']))
      end
   else
      query2.onData = function(q, d)
         return tonumber(d['economy'])
      end
   end
   query2:start()
end


hook.Add("PlayerSay", "MoneyCommand", function(ply, text, team)
   if(text == "/money") then
      local function callback_money(money)
         ply:PrintMessage(HUD_PRINTTALK, "Vous avez " .. money .. "€." )
      end
      ply:getMoney(callback_money)
   end
end)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...