Browse Source

Fix combineLatest operator subscription to unsubscribe from all subscription

If there is any nil subscription from sources,
the subscription skips to unsubscribe from the rest source's subscriptions.
Junseong Jang 7 years ago
parent
commit
f1363ea5c5
3 changed files with 3 additions and 6 deletions
  1. 1 1
      rx.lua
  2. 1 1
      src/operators/combineLatest.lua
  3. 1 4
      tests/combineLatest.lua

+ 1 - 1
rx.lua

@@ -522,7 +522,7 @@ function Observable:combineLatest(...)
     end
     end
 
 
     return Subscription.create(function ()
     return Subscription.create(function ()
-      for i = 1, #subscription do
+      for i = 1, #sources do
         if subscription[i] then subscription[i]:unsubscribe() end
         if subscription[i] then subscription[i]:unsubscribe() end
       end
       end
     end)
     end)

+ 1 - 1
src/operators/combineLatest.lua

@@ -55,7 +55,7 @@ function Observable:combineLatest(...)
     end
     end
 
 
     return Subscription.create(function ()
     return Subscription.create(function ()
-      for i = 1, #subscription do
+      for i = 1, #sources do
         if subscription[i] then subscription[i]:unsubscribe() end
         if subscription[i] then subscription[i]:unsubscribe() end
       end
       end
     end)
     end)

+ 1 - 4
tests/combineLatest.lua

@@ -5,10 +5,8 @@ describe('combineLatest', function()
   end)
   end)
 
 
   it('unsubscribes from the combined source observables', function()
   it('unsubscribes from the combined source observables', function()
-    local unsubscribeA = spy()
-    local subscriptionA = Rx.Subscription.create(unsubscribeA)
     local observableA = Rx.Observable.create(function(observer)
     local observableA = Rx.Observable.create(function(observer)
-      return subscriptionA
+      return nil
     end)
     end)
 
 
     local unsubscribeB = spy()
     local unsubscribeB = spy()
@@ -19,7 +17,6 @@ describe('combineLatest', function()
 
 
     local subscription = Rx.Observable.combineLatest(observableA, observableB):subscribe()
     local subscription = Rx.Observable.combineLatest(observableA, observableB):subscribe()
     subscription:unsubscribe()
     subscription:unsubscribe()
-    expect(#unsubscribeA).to.equal(1)
     expect(#unsubscribeB).to.equal(1)
     expect(#unsubscribeB).to.equal(1)
   end)
   end)