Bladeren bron

Iterate Subject observers in reverse;

To fix problems with removing items from a table while iterating.
bjorn 6 jaren geleden
bovenliggende
commit
132e8e8ae1
2 gewijzigde bestanden met toevoegingen van 6 en 6 verwijderingen
  1. 3 3
      rx.lua
  2. 3 3
      src/subjects/subject.lua

+ 3 - 3
rx.lua

@@ -2000,7 +2000,7 @@ end
 -- @arg {*...} values
 function Subject:onNext(...)
   if not self.stopped then
-    for i = 1, #self.observers do
+    for i = #self.observers, 1, -1 do
       self.observers[i]:onNext(...)
     end
   end
@@ -2010,7 +2010,7 @@ end
 -- @arg {string=} message - A string describing what went wrong.
 function Subject:onError(message)
   if not self.stopped then
-    for i = 1, #self.observers do
+    for i = #self.observers, 1, -1 do
       self.observers[i]:onError(message)
     end
 
@@ -2021,7 +2021,7 @@ end
 --- Signal to all Observers that the Subject will not produce any more values.
 function Subject:onCompleted()
   if not self.stopped then
-    for i = 1, #self.observers do
+    for i = #self.observers, 1, -1 do
       self.observers[i]:onCompleted()
     end
 

+ 3 - 3
src/subjects/subject.lua

@@ -52,7 +52,7 @@ end
 -- @arg {*...} values
 function Subject:onNext(...)
   if not self.stopped then
-    for i = 1, #self.observers do
+    for i = #self.observers, 1, -1 do
       self.observers[i]:onNext(...)
     end
   end
@@ -62,7 +62,7 @@ end
 -- @arg {string=} message - A string describing what went wrong.
 function Subject:onError(message)
   if not self.stopped then
-    for i = 1, #self.observers do
+    for i = #self.observers, 1, -1 do
       self.observers[i]:onError(message)
     end
 
@@ -73,7 +73,7 @@ end
 --- Signal to all Observers that the Subject will not produce any more values.
 function Subject:onCompleted()
   if not self.stopped then
-    for i = 1, #self.observers do
+    for i = #self.observers, 1, -1 do
       self.observers[i]:onCompleted()
     end