如何将RxJS5运算符链接到新的运算符?
问题描述:
根据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' })
任何解决方案? :)
答
您还没有将运算符添加到您将其添加到Observable.prototype
对象的对象中。这意味着它只会以现有的Observables
作为实例方法出现。您需要将其添加到Observable中作为Observable.mySimpleOperator
。
在内部,您需要将source.interval(500)
更改为Observable.interval(500)
,这是静态方法。