I am attempting to create a ModuleScript
where it will put DataStore
requests into a Queue. This is to prevent reaching the request limit of DataStore and receiving an error.
The method I have tried below is probably very inefficient. (And probably does not work)
I also ran into problems when I tried to adapt this code to GetAsync
as I need to return a value.
So:
Anyway I can make this more efficient? And how can I adapt it to work with GetAsync
.
local Remote = {} local DataService = game:GetService("DataStoreService") local function MaximumRequests() return 60 + game.Players.NumPlayers * 2 --Double check end -----SetQue----- local SetQue = {} local SetRequests = 0 spawn(function() while wait(0) do if #SetQue >= 1 then SetRequests = SetRequests + 1 if SetRequests < MaximumRequests() then DataService:GetDataStore(SetQue[1][1]):SetAsync(SetQue[1][2],SetQue[1][3]) table.remove(1) end end end end) spawn(function() while wait(65) do SetRequests = 0 end end) local function InTable(Tab,...) for _,n in pairs(Tab) do if n == {...} then return true end end end ------Functions---------- function Remote:SetPlayerData(Key,Value,Player,Callback) table.insert(SetQue,{Key,Value,Player}) spawn(function() repeat wait(0) until not InTable(SetQue,Key,Player) end) end function Remote:GetPlayerData(Key,Player) return FakeData[Key] --Return data end return Remote