我可以使用RxJS DOM而不是RxJS,并且可以观察到Redux吗

我可以使用RxJS DOM而不是RxJS,并且可以观察到Redux吗,rxjs,redux-observable,rxjs-dom,Rxjs,Redux Observable,Rxjs Dom,Redux Observable依赖于RxJS 我需要使用RxJSDOM中的filereader函数 看起来rxjsdom包含与RxJS相同的基本api集(加上DOM) 是否可以要求Redux Observable使用RxJS DOM而不是RxJS?导入两者会使我的构建变得臃肿。RxJS DOM aka适用于RxJS v4,而不是v5+。这两者不兼容。情况确实令人困惑 这是RxJS v4及以下版本: 这是RXJSV5+: 在v5+版本中,没有与Reader等效的官方版本,以下是发行单跟踪:

Redux Observable依赖于RxJS

我需要使用RxJSDOM中的filereader函数

看起来rxjsdom包含与RxJS相同的基本api集(加上DOM)

是否可以要求Redux Observable使用RxJS DOM而不是RxJS?导入两者会使我的构建变得臃肿。

RxJS DOM aka适用于RxJS v4,而不是v5+。这两者不兼容。情况确实令人困惑

  • 这是RxJS v4及以下版本:
  • 这是RXJSV5+:
在v5+版本中,没有与Reader等效的官方版本,以下是发行单跟踪:

尽管可能不是您想要听到的,但只要您了解可观察的基本工作原理,围绕其他API创建自定义可观察包装应该相当简单。无论如何,这是一项非常有价值的技能

fromReader
实际上是一个误称,因为您没有为它提供文件读取器,而是为它提供了一个
文件
,它会在内部创建自己的
文件读取器
来排出它。因此,让我们换成
fromFile
。这是一个非常基本的起点示例:

class FromFileAsTextObservable extends Observable {
  constructor(file, encoding) {
    super();

    this.file = file;
    this.encoding = encoding;
  }

  _subscribe(subscriber) {
    const reader = new FileReader();

    const loadHandler = event => {
      subscriber.next(event.target.result);
      subscriber.complete();
    };

    const errorHandler = event => {
      subscriber.error(event.target.error);
    };

    reader.addEventListener('load', loadHandler, false);
    reader.addEventListener('error', errorHandler, false);

    reader.readAsText(this.file, this.encoding);

    return () => {
      reader.removeEventListener('load', loadHandler, false);
      reader.removeEventListener('error', errorHandler, false);
    };
  }
}

class FromFileFactory {
  constructor(file) {
    this.file = file;
  }

  asText(encoding) {
    return new FromFileAsTextObservable(this.file, encoding);
  }
}

const fromFile = file =>
  new FromFileFactory(file);

const file = new File(['hello world'], 'example.txt', {
  type: 'text/plain',
});

fromFile(file).asText()
  .subscribe(text => console.log(text));
虽然对于复杂的API等,这是一种更灵活的方法,但如果您只想读取文件并处理加载/错误,则可以创建一个匿名可观察对象,如下所示:

const fromFileAsText = (file, encoding) => new Observable(subscriber => {
  const reader = new FileReader();

  const loadHandler = event => {
    subscriber.next(event.target.result);
    subscriber.complete();
  };

  const errorHandler = event => {
    subscriber.error(event.target.error);
  };

  reader.addEventListener('load', loadHandler, false);
  reader.addEventListener('error', errorHandler, false);

  reader.readAsText(file, encoding);

  return () => {
    reader.removeEventListener('load', loadHandler, false);
    reader.removeEventListener('error', errorHandler, false);
  };
});

const file = new File(['hello world'], 'example.txt', {
  type: 'text/plain',
});

fromFileAsText(file)
  .subscribe(text => console.log(text));

他们声称对其他RX实施有一个新的解决方案;我自己也没试过!在我的辩护中,我对我的方法名很年轻,也很鲁莽:P.@paulpdaniels Lolol你应该为自己感到羞耻,Lolol