RxJS-DOM aka rx-domはv5 +ではなくRxJS v4用です。 2つはと互換性がありませんです。状況は本当に混乱しています。
+ fromReader
への同等の公式は存在しないが、ここでの問題チケットの追跡です:https://github.com/ReactiveX/rxjs/issues/1223
おそらくあなたが聞きたいものではありませんが、他のAPIの周りにカスタムObservableラッパーを作成するはかなり簡単です Observablesが根本的にどのように機能するかを理解しています。これは非常に貴重なスキルです。
fromReader
は、FileReaderを提供していないため、実際には誤った名前で、File
を提供し、内部的にそれを排除するために独自のFileReader
を作成します。代わりにfromFile
としましょう。それはあなたがしたいすべてのファイルを読み込み、ロード/エラーを処理した場合、あなたが代わりに作成することができ、匿名の複雑なAPIと、このような、より柔軟な方法ですが
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));
:これは非常に基本的な出発点の一例です彼らは、他のRXため(https://redux-observable.js.org/docs/FAQ.html#general-rxjs-v4)アダプタを書き込む手順]を持っていると主張
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));
:観察可能なようなので実装。自分でそれを試していない! –