为什么concatAll会删除我的流?

时间:2016-01-26 17:39:01

标签: javascript reactjs rxjs

    function fnToDeferredObservable(fn) {
      return Rx.Observable.defer(() => {
       const result = fn();
       let observable;
       if (result instanceof Rx.Observable) {
        observable = result;
       } else if (result instanceof Promise) {
        observable = Rx.Observable.fromPromise(result);
       } else {
        observable = Rx.Observable.return(result);
       }
       return observable;
    });
   }
  function transactionEmmiter() {
    const eventStream = RxReact.FuncSubject.create(() => () =>   action(...attr));
    this.transactionStream = this.transactionStream.merge(eventStream);
  }
  function componentDidMount() { 
    this.transactionStream
    .map(fnToDeferredObservable)
    .concatAll()
    .subscribe((result) => console.log(result),
      (err) => console.log(err),
      () => console.log('complete'));
  }

 <button className="btn btn-default" onClick={this.transactionEmmiter(this.props.increment, 1)}>
      Increment
    </button>
    {' '}
    <button className="btn btn-default" onClick={this.transactionEmmiter(this.props.double)}>
      Double (Async)
    </button>
    <hr />
    <button className="btn btn-default" onClick={this.transactionEmmiter(this.props.random)}>
      Random Increment (Async)
    </button>

eventStream适用于DomEvents,将它们合并到事务流中,事务流本身推迟任何给定的处理程序(并从返回值创建observable)concatAll,concats这些新的observable。结果是,任何异步函数都排队等待解析之前的事件。到目前为止工作,但是.concat在我最初发出一个DomEvent之后会以某种方式删除所有事件,它只是一段很短的时间(直到第一个Observable完成),其中发送的Dom事件由事务订阅处理。

Click Events
———2——>
—1————>
————3—>
Map Value to function expression
———y2——>
—y1————>
————y3—>
Merge
—y1—y2—y3—>
Map to deferred Observable
—y1—y2—y3—>
—x1—x2—x3—>
Concat all
—>xy1—>xy2—>xy2
expected output is:
result = y()
—>result1—>result2—>result3———>

example:
with input:
———2——>
—1————>
————3—>
——————————4—>
expected:
—>result1—>result2—>result3—>result4
actual:
—>result1—>result2—>result3

0 个答案:

没有答案