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
|
||||
|
||||
function Client:sync(niters)
|
||||
while niters == nil or niters > 0 do
|
||||
self:_sync { timeout = 15000 }
|
||||
if niters then
|
||||
niters = niters - 1
|
||||
local function return_false()
|
||||
return false
|
||||
end
|
||||
|
||||
function Client:sync(stop, timeout)
|
||||
if not stop then
|
||||
stop = return_false
|
||||
end
|
||||
while not stop(self) do
|
||||
self:_sync { timeout = timeout or 15000 }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user