mirror of
https://github.com/qbcore-fivem/qb-core.git
synced 2026-08-28 17:01:16 +00:00
feat: use promises in callbacks + cleanup
This commit is contained in:
+9
-2
@@ -208,7 +208,9 @@ end)
|
||||
|
||||
-- Client Callback
|
||||
RegisterNetEvent('QBCore:Client:TriggerClientCallback', function(name, ...)
|
||||
QBCore.Functions.TriggerClientCallback(name, function(...)
|
||||
if not QBCore.ClientCallbacks[name] then return end
|
||||
|
||||
QBCore.ClientCallbacks[name](function(...)
|
||||
TriggerServerEvent('QBCore:Server:TriggerClientCallback', name, ...)
|
||||
end, ...)
|
||||
end)
|
||||
@@ -216,7 +218,12 @@ end)
|
||||
-- Server Callback
|
||||
RegisterNetEvent('QBCore:Client:TriggerCallback', function(name, ...)
|
||||
if QBCore.ServerCallbacks[name] then
|
||||
QBCore.ServerCallbacks[name](...)
|
||||
QBCore.ServerCallbacks[name].promise:resolve(...)
|
||||
|
||||
if QBCore.ServerCallbacks[name].callback then
|
||||
QBCore.ServerCallbacks[name].callback(...)
|
||||
end
|
||||
|
||||
QBCore.ServerCallbacks[name] = nil
|
||||
end
|
||||
end)
|
||||
|
||||
+27
-6
@@ -6,14 +6,35 @@ function QBCore.Functions.CreateClientCallback(name, cb)
|
||||
QBCore.ClientCallbacks[name] = cb
|
||||
end
|
||||
|
||||
function QBCore.Functions.TriggerClientCallback(name, cb, ...)
|
||||
if not QBCore.ClientCallbacks[name] then return end
|
||||
QBCore.ClientCallbacks[name](cb, ...)
|
||||
end
|
||||
function QBCore.Functions.TriggerCallback(name, ...)
|
||||
local cb = nil
|
||||
local args = { ... }
|
||||
|
||||
if type(args[1]) == "function" then
|
||||
cb = args[1]
|
||||
table.remove(args, 1)
|
||||
elseif type(args[1]) == "table" then
|
||||
local _, err = pcall(function()
|
||||
args[1]["__cfx_functionReferenc"] = args[1]["__cfx_functionReferenc"]
|
||||
end)
|
||||
|
||||
if err and string.find(err, "Cannot index a funcref") then
|
||||
cb = args[1]
|
||||
table.remove(args, 1)
|
||||
end
|
||||
end
|
||||
|
||||
QBCore.ServerCallbacks[name] = {
|
||||
callback = cb,
|
||||
promise = promise.new()
|
||||
}
|
||||
|
||||
function QBCore.Functions.TriggerCallback(name, cb, ...)
|
||||
QBCore.ServerCallbacks[name] = cb
|
||||
TriggerServerEvent('QBCore:Server:TriggerCallback', name, ...)
|
||||
|
||||
if cb == nil then
|
||||
Citizen.Await(QBCore.ServerCallbacks[name].promise)
|
||||
return QBCore.ServerCallbacks[name].promise.value
|
||||
end
|
||||
end
|
||||
|
||||
function QBCore.Debug(resource, obj, depth)
|
||||
|
||||
Reference in New Issue
Block a user