Observable.debounce;
This commit is contained in:
parent
16a0336dbe
commit
a343856719
8
rx.lua
8
rx.lua
@ -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
|
||||
|
||||
|
32
src/operators/debounce.lua
Normal file
32
src/operators/debounce.lua
Normal 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
|
@ -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)
|
||||
|
@ -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',
|
||||
|
Loading…
x
Reference in New Issue
Block a user