2016-03-04 38 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),這是靜態方法。