浏览代码

Observable.startWith;

bjorn 9 年之前
父节点
当前提交
2bda006d14
共有 6 个文件被更改,包括 50 次插入0 次删除
  1. 11 0
      doc/README.md
  2. 13 0
      rx.lua
  3. 15 0
      src/operators/startWith.lua
  4. 1 0
      tests/observable.lua
  5. 9 0
      tests/startWith.lua
  6. 1 0
      tools/concat.lua

+ 11 - 0
doc/README.md

@@ -58,6 +58,7 @@ RxLua
   - [skip](#skipn)
   - [skipUntil](#skipuntilother)
   - [skipWhile](#skipwhilepredicate)
+  - [startWith](#startwithvalues)
   - [sum](#sum)
   - [take](#taken)
   - [takeUntil](#takeuntilother)
@@ -594,6 +595,16 @@ Returns a new Observable that skips elements until the predicate returns falsy f
 
 ---
 
+#### `:startWith(values)`
+
+Returns a new Observable that produces the specified values followed by all elements produced by the source Observable.
+
+| Name | Type | Default | Description |
+|------|------|---------|-------------|
+| `values` | *... |  | The values to produce before the Observable begins producing values normally. |
+
+---
+
 #### `:sum()`
 
 Returns an Observable that produces a single value representing the sum of the values produced by the original.

+ 13 - 0
rx.lua

@@ -1217,6 +1217,19 @@ function Observable:skipWhile(predicate)
   end)
 end
 
+--- Returns a new Observable that produces the specified values followed by all elements produced by
+-- the source Observable.
+-- @arg {*...} values - The values to produce before the Observable begins producing values
+--                      normally.
+-- @returns {Observable}
+function Observable:startWith(...)
+  local values = util.pack(...)
+  return Observable.create(function(observer)
+    observer:onNext(util.unpack(values))
+    return self:subscribe(observer)
+  end)
+end
+
 --- Returns an Observable that produces a single value representing the sum of the values produced
 -- by the original.
 -- @returns {Observable}

+ 15 - 0
src/operators/startWith.lua

@@ -0,0 +1,15 @@
+local Observable = require 'observable'
+local util = require 'util'
+
+--- Returns a new Observable that produces the specified values followed by all elements produced by
+-- the source Observable.
+-- @arg {*...} values - The values to produce before the Observable begins producing values
+--                      normally.
+-- @returns {Observable}
+function Observable:startWith(...)
+  local values = util.pack(...)
+  return Observable.create(function(observer)
+    observer:onNext(util.unpack(values))
+    return self:subscribe(observer)
+  end)
+end

+ 1 - 0
tests/observable.lua

@@ -264,6 +264,7 @@ describe('Observable', function()
   dofile('tests/skip.lua')
   dofile('tests/skipUntil.lua')
   dofile('tests/skipWhile.lua')
+  dofile('tests/startWith.lua')
   dofile('tests/sum.lua')
   dofile('tests/take.lua')
   dofile('tests/takeUntil.lua')

+ 9 - 0
tests/startWith.lua

@@ -0,0 +1,9 @@
+describe('startWith', function()
+  it('produces errors emitted by the source', function()
+    expect(Rx.Observable.throw():startWith(1).subscribe).to.fail()
+  end)
+
+  it('produces all specified elements in a single onNext before producing values normally', function()
+    expect(Rx.Observable.fromRange(3, 4):startWith(1, 2)).to.produce({{1, 2}, {3}, {4}})
+  end)
+end)

+ 1 - 0
tools/concat.lua

@@ -42,6 +42,7 @@ local files = {
   'src/operators/skip.lua',
   'src/operators/skipUntil.lua',
   'src/operators/skipWhile.lua',
+  'src/operators/startWith.lua',
   'src/operators/sum.lua',
   'src/operators/take.lua',
   'src/operators/takeUntil.lua',