2016-03-04 91 views
0

根据operator creation guide,我试图链接一些运营商,我习惯了另一个运营商,但没有任何成功。如何将RxJS5运算符链接到新的运算符?

function mySimpleOperator(actionName, iterable$, functionThatReturnAnObservable) { 
    return Observable.create(subscriber => { 
    var source = this; 
    var subscription = source 
     .interval(500) 
     .skipUntil(iterable$.filter(({ action }) => action.type === actionName)) 
     .take(1) 
     .flatMap(functionThatReturnAnObservable) 
     .subscribe(value => { 
     try { 
      subscriber.next(value); 
     } catch(err) { 
      subscriber.error(err); 
     } 
    }, 
    err => subscriber.error(err), 
    () => subscriber.complete()); 

    return subscription; 
    }); 
} 

Observable.prototype.mySimpleOperator = mySimpleOperator; 

该函数只是开始一个间隔,并将跳过,直到actionName将被发射。

但是当我试图用我的操作

Observable.mySimpleOperator('APP_READY', source$,() => Observable.of({ type: 'DONE' }) 

它抛出一个错误

Observable.mySimpleOperator is not a function 

但是,如果我做INTERVALL叫我的新的运营商以外的它的工作原理?!

Observable.interval(500).mySimpleOperatorWithoutIntervall('APP_READY', source$,() => Observable.of({ type: 'DONE' }) 

任何解决方案? :)

回答

1

您还没有将运算符添加到您将其添加到Observable.prototype对象的对象中。这意味着它只会以现有的Observables作为实例方法出现。您需要将其添加到Observable中作为Observable.mySimpleOperator

在内部,您需要将source.interval(500)更改为Observable.interval(500),这是静态方法。