瀏覽代碼

[fix] Sample should not produce anything before the source has produced any value

iTitou 7 年之前
父節點
當前提交
20ec3b7bef
共有 3 個文件被更改,包括 7 次插入6 次删除
  1. 3 1
      rx.lua
  2. 3 1
      src/operators/sample.lua
  3. 1 4
      tests/sample.lua

+ 3 - 1
rx.lua

@@ -1229,7 +1229,9 @@ function Observable:sample(sampler)
     end
     end
 
 
     local function onNext()
     local function onNext()
-      return observer:onNext(util.unpack(latest))
+      if #latest > 0 then
+        return observer:onNext(util.unpack(latest))
+      end
     end
     end
 
 
     local function onError(message)
     local function onError(message)

+ 3 - 1
src/operators/sample.lua

@@ -16,7 +16,9 @@ function Observable:sample(sampler)
     end
     end
 
 
     local function onNext()
     local function onNext()
-      return observer:onNext(util.unpack(latest))
+      if #latest > 0 then
+        return observer:onNext(util.unpack(latest))
+      end
     end
     end
 
 
     local function onError(message)
     local function onError(message)

+ 1 - 4
tests/sample.lua

@@ -6,10 +6,7 @@ describe('sample', function()
   it('produces nil values if the sampler fires before the source does', function()
   it('produces nil values if the sampler fires before the source does', function()
     local sampler = Rx.Observable.fromRange(3)
     local sampler = Rx.Observable.fromRange(3)
     local onNext, onError, onCompleted = observableSpy(Rx.Observable.empty():sample(sampler))
     local onNext, onError, onCompleted = observableSpy(Rx.Observable.empty():sample(sampler))
-    expect(#onNext).to.equal(3)
-    expect(next(onNext[1])).to_not.exist()
-    expect(next(onNext[2])).to_not.exist()
-    expect(next(onNext[3])).to_not.exist()
+    expect(#onNext).to.equal(0)
   end)
   end)
 
 
   it('produces the latest value produced by the source when the sampler fires', function()
   it('produces the latest value produced by the source when the sampler fires', function()