如何通过应用内置的RxJS运算符来扩展library(data.table)
dcast(setDT(dc), ID+Rsn+Loc~Activity, value.var = "Inst")
类?
我想做这样的事情:
Observable
这可以在没有构造函数返回的情况下完成吗?
答案 0 :(得分:2)
这很大程度上取决于你想要做什么,但是假设你想要制作一个TruthyObservable
,其行为与默认Observable.create(...)
非常相似,但只传递偶数:
import { Observable, Observer, Subscriber, Subject, Subscription } from 'rxjs';
import 'rxjs/add/operator/filter';
class TruthyObservable<T> extends Observable<T> {
constructor(subscribe?: <R>(this: Observable<T>, subscriber: Subscriber<R>) => any) {
if (subscribe) {
let oldSubscribe = subscribe;
subscribe = (obs: Subscriber<any>) => {
obs = this.appendOperators(obs);
return oldSubscribe.call(this, obs);
};
}
super(subscribe);
}
private appendOperators(obs: Subscriber<any>) {
let subject = new Subject();
subject
.filter((val: number) => val % 2 == 0)
.subscribe(obs);
return new Subscriber(subject);
}
}
let o = new TruthyObservable<number>((obs: Observer<number>) => {
obs.next(3);
obs.next(6);
obs.next(7);
obs.next(8);
});
o.subscribe(val => console.log(val));
打印到控制台:
6
8
查看现场演示:https://developer.wordpress.org/reference/functions/wp_insert_user/
通常继承Observable
的类会覆盖实际在内部进行订阅的_subscribe()
方法,但在我们的情况下,我们希望使用回调,我们可以自己发出值(因为此Observable不会发出任何事情本身)。方法_subscribe()
被_subscribe
属性所掩盖,如果它存在,那么如果我们只是覆盖此方法,我们将无法向其追加任何运算符。这就是为什么我用另一个函数将_subscribe
包装在构造函数中,然后通过在Subject
方法中用filter()
链接的appendOperators()
传递所有值。请注意,我将原始观察者替换为Subject
的{{1}}。
最后我打电话给你。 obs = this.appendOperators(obs)
我实际上将值推送到obs.next(3);
过滤它们并将它们传递给原始Subject
。
答案 1 :(得分:1)
我认为您可以通过自定义运算符获得所需内容:
Observable.prototype.truthy = function truthy() {
return this.filter(x => x);
}