Use a callback in client:sync() to determine when to stop the loop
Instead of adding more and more possible conditions on which the while-loop
inside client:sync() could stop, support passing a callback function which is
used to determine when to stop the loop.
The old "so N iterations behaviour" can be achieved with something like:
function iterate_n_times(n)
return function ()
n = n - 1
return n == 0
end
end
client:sync(iterate_n_times(10))
If no function is passed, the client:sync() function loops forever.
This commit is contained in:
@@ -429,12 +429,16 @@ function Client:_sync(options)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Client:sync(niters)
|
local function return_false()
|
||||||
while niters == nil or niters > 0 do
|
return false
|
||||||
self:_sync { timeout = 15000 }
|
end
|
||||||
if niters then
|
|
||||||
niters = niters - 1
|
function Client:sync(stop, timeout)
|
||||||
|
if not stop then
|
||||||
|
stop = return_false
|
||||||
end
|
end
|
||||||
|
while not stop(self) do
|
||||||
|
self:_sync { timeout = timeout or 15000 }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user