Lua回调函数返回值问题

我正在尝试从 Lua 中的 MySQL 数据库查询中获取一个值,但似乎无法返回值或在回调外设置本地变量,我唯一取得的进展是能够通过回调将值连续传递到需要它的位置,但即使是这样它仍然被卡在回调中,我无法将它分配给另一个变量。

这是我目前的代码:

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

    -- 回调函数
    pq.onSuccess = function(data)
        print("Prepared Query successful!")
        pcall(callback, data:getData())
    end

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

    -- 准备参数
    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

    -- 执行查询
    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

但这不起作用,请帮助我吧。

点赞