RxJS v5+;中的“可观测.传输”发生了什么;?
RxJS v4过去有一个RxJS v5+;中的“可观测.传输”发生了什么;?,rxjs,method-chaining,pipelining,transducer,Rxjs,Method Chaining,Pipelining,Transducer,RxJS v4过去有一个可观察的.传感器方法,该方法使用传感器。这允许使用独立于库的传感器操作员,这在过去具有主要的性能优势 来源 RxJS v5.5和v6具有可管道化的操作符,v6删除了方法链接。因此,我假设RxJS操作符是标准的转换器。通过查看源代码,情况似乎并非如此 RxJS v6操作符的功能类似于一个转换器,其中每个值在下一个值通过之前完全通过链传递,但是RxJS v6操作符没有使用我在其他库中看到的标准转换器方法,这意味着,我认为它们不可移植 关于传感器的整个事情是,他们对
可观察的.传感器
方法,该方法使用传感器。这允许使用独立于库的传感器操作员,这在过去具有主要的性能优势
来源
.pipe
是否与.transduce
一致,或者在RxJS v5中是否完全删除了此方法?我有完全相同的问题,在任何地方都找不到答案。是的,您可以管道
,但我相信这将为每个操作符创建中间观察值。我不确定,但是,这将是关于阅读代码
所以我想出了我自己的transduce
操作符:
function transformForObserver(o) {
return {
"@@transducer/init": function() {
return o;
},
"@@transducer/step": function(obs, input) {
return obs.next(input);
},
"@@transducer/result": function(obs) {
return obs.complete();
}
};
}
const transduce = (obs, transducer) => {
const xform = transducer(transformForObserver);
return Observable.create(o => {
return obs.subscribe({
next: x => {
const res = tryCatch(
xform["@@transducer/step"],
err => {
console.error(`Error occurred in transducer/step!`, err);
return err;
}
)(xform, o, x);
if (res instanceof Error) { o.error(res); }
},
error: err => {
console.error(`Error occurred in observable passed to Rx transduce fn!`, err);
o.error(err);
},
complete: () => {o.complete();}
});
});
}
尚未测试,如果有兴趣,将很快发布
更新:我分叉了jslongser的转换器库,并将此类转换器包含在其中。Fork为,函数为
transducerazyObservable
。参考使用示例。扩展与其他传感器库的兼容性会很好。我不知道这是什么意思。如果您所指的是传感器协议,则遵循该协议。是。因此,它将允许使用其他库连同它!好奇地问,性能优势有多好?可用于javascript的转换器非常有限。例如,我正在寻找startWith
,我正在编写一个。测试可观察传感器并将其添加到库中。你可以看看。从这个函数中,您应该能够将其放在原型上或按原样使用。启动它工作的存储库,如果没有,则在那里留下一个问题。我只是在本地测试。