Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJS v5+;中的“可观测.传输”发生了什么;?_Rxjs_Method Chaining_Pipelining_Transducer - Fatal编程技术网

RxJS v5+;中的“可观测.传输”发生了什么;?

RxJS v5+;中的“可观测.传输”发生了什么;?,rxjs,method-chaining,pipelining,transducer,Rxjs,Method Chaining,Pipelining,Transducer,RxJS v4过去有一个可观察的.传感器方法,该方法使用传感器。这允许使用独立于库的传感器操作员,这在过去具有主要的性能优势 来源 RxJS v5.5和v6具有可管道化的操作符,v6删除了方法链接。因此,我假设RxJS操作符是标准的转换器。通过查看源代码,情况似乎并非如此 RxJS v6操作符的功能类似于一个转换器,其中每个值在下一个值通过之前完全通过链传递,但是RxJS v6操作符没有使用我在其他库中看到的标准转换器方法,这意味着,我认为它们不可移植 关于传感器的整个事情是,他们对

RxJS v4过去有一个
可观察的.传感器
方法,该方法使用传感器。这允许使用独立于库的传感器操作员,这在过去具有主要的性能优势

来源

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

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

关于传感器的整个事情是,他们对集合本身一无所知。不必专门为可观察对象编写100个运算符,您可以编写100个能够应用于任何集合或流类型的运算符


.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
,我正在编写一个。测试可观察传感器并将其添加到库中。你可以看看。从这个函数中,您应该能够将其放在原型上或按原样使用。启动它工作的存储库,如果没有,则在那里留下一个问题。我只是在本地测试。