Observable.debounce;

This commit is contained in:
bjorn 2015-12-20 22:57:59 -08:00
parent 16a0336dbe
commit a343856719
4 changed files with 41 additions and 4 deletions

8
rx.lua
View File

@ -608,7 +608,7 @@ function Observable:debounce(time, scheduler)
time = time or 0
return Observable.create(function(observer)
local function debounce(key)
local function wrap(key)
local debounced
return function(...)
local value = util.pack(...)
@ -625,7 +625,11 @@ function Observable:debounce(time, scheduler)
end
end
local subscription = self:subscribe(debounce('onNext'), debounce('onError'), debounce('onCompleted'))
local subscription = self:subscribe(wrap('onNext'), wrap('onError'), wrap('onCompleted'))
return Subscription.create(function()
end)
end)
end

View File

@ -0,0 +1,32 @@
local Observable = require 'observable'
local Subscription = require 'subscription'
local util = require 'util'
function Observable:debounce(time, scheduler)
time = time or 0
return Observable.create(function(observer)
local function wrap(key)
local debounced
return function(...)
local value = util.pack(...)
if debounced then
debounced:unsubscribe()
end
local values = util.pack(...)
debounced = scheduler:schedule(function()
return observer[key](observer, util.unpack(values))
end, time)
end
end
local subscription = self:subscribe(wrap('onNext'), wrap('onError'), wrap('onCompleted'))
return Subscription.create(function()
end)
end)
end

View File

@ -16,10 +16,10 @@ end
-- @arg {function} action - The action to run.
-- @arg {number=0} delay - The delay, in milliseconds.
-- @returns {Subscription}
function TimeoutScheduler:schedule(action, delay)
function TimeoutScheduler:schedule(action, delay, ...)
local timer = require 'timer'
local subscription
local handle = timer.setTimeout(delay, action)
local handle = timer.setTimeout(delay, action, ...)
return Subscription.create(function()
timer.clearTimeout(handle)
end)

View File

@ -17,6 +17,7 @@ local files = {
'src/operators/concat.lua',
'src/operators/contains.lua',
'src/operators/count.lua',
'src/operators/debounce.lua',
'src/operators/defaultIfEmpty.lua',
'src/operators/delay.lua',
'src/operators/distinct.lua',