Prechádzať zdrojové kódy

Observable.debounce;

bjorn 9 rokov pred
rodič
commit
a343856719

+ 6 - 2
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 - 0
src/operators/debounce.lua

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

+ 2 - 2
src/schedulers/timeoutscheduler.lua

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

+ 1 - 0
tools/build.lua

@@ -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',