Forráskód Böngészése

Add Observable:flatten;

bjorn 10 éve
szülő
commit
c49e5aa852
2 módosított fájl, 35 hozzáadás és 0 törlés
  1. 10 0
      doc/README.md
  2. 25 0
      rx.lua

+ 10 - 0
doc/README.md

@@ -218,6 +218,16 @@ Returns:
 
 ---
 
+#### `:flatten()`
+
+Returns a new Observable that subscribes to the Observables produced by the original and produces their values.
+
+Returns:
+
+- `Observable`
+
+---
+
 #### `:last()`
 
 Returns a new Observable that only produces the last result of the original.

+ 25 - 0
rx.lua

@@ -322,6 +322,31 @@ function Observable:first()
   return self:take(1)
 end
 
+--- Returns a new Observable that subscribes to the Observables produced by the original and
+-- produces their values.
+-- @returns {Observable}
+function Observable:flatten()
+  return Observable.create(function(observer)
+    local function onError(message)
+      return observer:onError(message)
+    end
+
+    local function onNext(observable)
+      local function innerOnNext(...)
+        observer:onNext(...)
+      end
+
+      observable:subscribe(innerOnNext, onError, noop)
+    end
+
+    local function onComplete()
+      return observer:onComplete()
+    end
+
+    return self:subscribe(onNext, onError, onComplete)
+  end)
+end
+
 --- Returns a new Observable that only produces the last result of the original.
 -- @returns {Observable}
 function Observable:last()