gpt4 book ai didi

javascript - 使用 RxJS 组合函数/运算符

转载 作者:行者123 更新时间:2023-11-29 21:21:01 25 4
gpt4 key购买 nike

有什么方法可以在没有点符号的情况下使用 RxJS 组合函数。

用例:我的事件流可能由可配置函数处理,我想通过添加到数组来配置它们。

const result$ = source$.map(function1).map(function2).map(function3)

我想要 farray = [function1, function2, function3] 并按如下方式使用它:

const result$ = source$.compose(farray)

原因是它应该能够在执行期间(或在初始化期间)更改farray

我找到了 transducers-js但不确定它是如何 mapfilter 以及其他与 Rx 对应物一起玩的。

感谢任何提示。

最佳答案

您可以只将 Rambda.compose 与 map 一起使用。

const functions = [x => x * 2, x => x + 1]

Rx.Observable
.range(0, 10)
.map(R.compose(...functions))
.subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.21.0/ramda.min.js"></script>

或者您可以创建自己的运算符:

const functions = [x => x * 2, x => x + 1];

Rx.Observable.prototype.mapCompose = function (functions) {
return this.map(R.compose(...functions));
};

Rx.Observable
.range(0, 10)
.mapCompose(functions)
.subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.21.0/ramda.min.js"></script>

Ofc,Rambda compose 可以切换为任何其他 compose 实现。

编辑:编写 Rx 运算符稍微复杂一些。很难想象它会是什么样子,更不用说实现它了。但是你总是可以组合(或应用)一些接受 observable 并返回 observable 的函数。这是示例实现。

Rx.Observable.prototype.apply = function (functions) {
functions = [].concat(functions);

return functions.reduce(function (observable, func) {
return func(observable);
}, this);
};

var functions = [obs => obs.map(x => x*2), obs => obs.filter(x => x % 3 === 0)];

Rx.Observable
.range(0, 15)
.apply(functions)
.subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>

关于javascript - 使用 RxJS 组合函数/运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com