Generated by Rojo 7.3.0.
To install with wally, insert it above wally.toml [dependecies]
Cache = "ernisto/[email protected]"
Implement ur own weak cache may be kinda ugly, specialy if ur cache have 2 keys/layers/dimensions, as u can see here
local cache = setmetatable({}, { __mode = 'k' })
local function awaitCombatSession(player1: Player, player2: Player)
if cache[player1] and cache[player1][player2] then return cache[player1][player2]:expect() end
if cache[player2] and cache[player2][player1] then return cache[player2][player2]:expect() end
local promise = Promise.new(coroutine.yield)
cache[player1] = cache[player] or setmetatable({}, { __mode = 'k'})
cache[player1][player2] = promise
--// Instance
local data = someYieldingFunction()
local self = {}
promise:_resolve(self)
return promise
end
--// Vars
local cache = Cache.async(-1, 'k', 'k')
-- setmetatable({
-- [player1] = setmetatable({ [player2] = CombatSession }, { __mode = 'k' })
-- }, { __mode = 'k' })
--// Component
local function CombatSession(player1: Player, player2: Player)
--// Instance
local data = someYieldingCall()
local self = {}
--// End
return self
end
local function CombatSessionAsync(player1: Player, player2: Player)
return cache:findFirstPromise(player1, player2)
or cache:findFirstPromise(player2, player1)
or cache:promise(function() awaitCombatSession(player1, player2) end)
end