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:
Adrian Perez de Castro
2016-07-05 01:09:51 +03:00
parent cadda45130
commit b0cbf93b7e

View File

@@ -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
end
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