2

# How would I check when an array gets a value then wait and remove it?

uhi_o 417
1 year ago
Edited 1 year ago

Hey guys,

I have a table in my script where it's a cooldown where every userId is placed in it. I want to detect when a value is added to it then wait a certain amount and then remove the user.

I know how to achieve that but my issue here is I only get to wait for the first value in the table.

Here is my attempted code.

local CooldownList = {}

--I insert values in the table elsewhere

coroutine.wrap(function()
print("Running coroutine")
while true do
wait()
if #CooldownList >= 1 then
coroutine.wrap(function()
repeat
print("Waiting and trying to remove user from array")
wait(45)
table.remove(CooldownList, 1)
print("Successfully removed user from array")
until #CooldownList < 1
end)()
end
end
end)()


Tbh, I just went with coroutines because I thought that was best.

Have a great day everybody ;)

1
Edited 1 year ago

I think I understand what you're trying to do, but I think polling (using a coroutine enclosed in a while loop that constantly runs) is the wrong answer. Plus, you've got a coroutine inside of a coroutine; that can get messy!

You can either use metatables or a function-based approach, but the former is generally over-engineering. Opting for the latter choice, here's what I would do:

local userIds = {}

table.insert(userIds, id) -- insert the id into the table
delay(45, function() -- operate on a separate thread so this function does not yield any code it's used in
local index = table.find(userIds, id) -- locate where our userId async is via table.find's return argument
if index then -- ensure the index is legitimate
table.remove(userIds, index) -- remove the userId from the index
print("Removed", id, "from userIds index", index)
end
end)
end


You can use this example code to test it:

for i = 1, 5 do