gpt4 book ai didi

rxjs - RxJS v5+ 中的 `Observable.transduce` 发生了什么?

转载 作者:行者123 更新时间:2023-12-01 04:31:57 25 4
gpt4 key购买 nike

RxJS v4 曾经有一个 Observable.transduce采用换能器的方法。这允许使用在过去具有重大性能优势的独立于库的传感器运算符。

来源

  • https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/transduce.md
  • https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/transducers.md
  • https://medium.com/front-end-hacking/rxjs-transducers-vs-method-chaining-performance-87561cf4ce65
  • https://github.com/ReactiveX/rxjs/pull/1323

  • RxJS v5.5 和 v6 具有可管道操作符和 v6 删除了方法链。因此,我假设 RxJS 操作符是标准的转换器。查看源代码,情况似乎并非如此。

    RxJS v6 操作符的功能就像一个转换器,其中每个值在下一个值通过之前完全通过链传递,但 RxJS v6 操作符没有使用我在其他库中看到的标准转换器方法,这意味着,我不认为它们是可移植的。

    关于传感器的整个事情是他们对集合本身一无所知。您可以编写 100 个普遍适用于任何集合或流类型的运算符,而不是专门为 observable 编写 100 个运算符。

    .pipe.transduce一致还是在 RxJS v5 中完全删除了这种方法?

    最佳答案

    我有完全相同的问题,但在任何地方都找不到答案。是的,您可以 pipe ,但我相信这会为每个运算符(operator)创建中间观察值。不过我不确定,这将是关于阅读代码的。

    所以我想出了我自己的transduce运算符(operator) :

    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();}
    });
    });
    }

    还没有测试,如果有兴趣会尽快发布。

    更新 :我 fork 了 jslongser 的转换器库,并在其中包含了这样的转换器。 fork 是 https://github.com/brucou/transducers.js , 函数为 transduceLazyObservable .参见 tests例如使用。

    关于rxjs - RxJS v5+ 中的 `Observable.transduce` 发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53448936/

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