Lua возвращаемое значение от обратного вызова - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь получить значение из MySQL запроса к базе данных в lua, но, похоже, я не могу либо вернуть значение, либо установить локальную переменную вне обратного вызова, единственный достигнутый мной прогресс - это возможность чтобы непрерывно передавать значение через обратные вызовы туда, где оно мне нужно, но даже тогда оно по-прежнему застряло в обратном вызове, и я не могу присвоить его другой переменной.

Это то, что у меня сейчас есть:

function Database:PrepareQuery(query, params, callback)
    local pq = DBObject:prepare(query)
    --pq:setOption(mysqloo.OPTION_NUMERIC_FIELDS) 

    -- Callback functions
    pq.onSuccess = function(data)
        print("Prepared Query successful!")
        pcall(callback, data:getData())
    end

    pq.onError = function(err)
        print("Prepared Query Error:", err)
    end

    -- Prepare the parameters
    local paramsType = type(params)
    if (params == NULL) then
        pq:setNull(1)
    elseif (paramsType == "number") then
        pq:setNumber(1, params)
    elseif (paramsType == "string") then
        pq:setString(1, params)
    elseif (paramsType == "boolean") then
        pq:setBoolean(1, params)
    elseif (paramsType == "table") then
        for k, v in ipairs(params) do
            if (v == NULL) then
                pq:setNull(k)
            else
                local vType = type(v)
                if (vType == "number") then
                    pq:setNumber(k, v)
                elseif (vType == "string") then
                    pq:setString(k, v)
                elseif (vType == "boolean") then
                    pq:setBoolean(k, v)
                end
            end
        end
    end

    -- Execute the query
    pq:start()
end

function DatabaseFuncs:GetCharacterName(steam_id64, callback)
    local query = [[
        SELECT 
            `character`.`first_name`,
            `character`.`last_name`
        FROM
            `character`
        WHERE
            `character`.`steam_id64` = ?
        ;
    ]]
    NYCRP.DB:PrepareQuery(query, steam_id64, function(result)
        callback(result[1].first_name.." "..result[1].last_name)
    end)
end

И я могу назвать это так:

DatabaseFuncs:GetCharacterName(ply:SteamID64(), function(characterName)
    print(characterName)
end)

Но я не могу присвоить CharacterName другой переменной, я хочу быть в состоянии сделать это:

local characterName = DatabaseFuncs:GetCharacterName(ply:SteamID64())

Что означает Мне нужно вернуть значение как это:

function DatabaseFuncs:GetCharacterName(steam_id64)
    local query = [[
        SELECT 
            `character`.`first_name`,
            `character`.`last_name`
        FROM
            `character`
        WHERE
            `character`.`steam_id64` = ?
        ;
    ]]
    local name
    NYCRP.DB:PrepareQuery(query, steam_id64, function(result)
        name = result[1].first_name.." "..result[1].last_name
    end)
    return name
end

Но это не работает, любая помощь, пожалуйста?

...