私は、選択したファイルをユーザが読み込んでbase64に変換するアプリケーションを作成しています。私は、すべてのファイルがメモリに読み込まれたときに通知を出したい。この目的のために私はのイベントをFileReader
として扱い、完全な通知を送るObservable
を使用しています。私はforkJoin
を使って操作を並行して実行しています。オブザーバブルと並行してファイルを読む
Observable
を作成して購読しているコードを下に見てください。
onChange($event: any) {
console.log('No of files selected: ' + $event.target.files.length);
var observableBatch : any = [];
var rawFiles = $event.target.files;
for (var i = rawFiles.length - 1; i >= 0; i--) {
var reader = new FileReader();
var file = rawFiles[i];
var myobservable = Observable.create((observer: any) => {
reader.onload = function (e: any) {
var data = e.target;
var imageSrc = data.result;
console.log('File loaded succesfully.');
observer.next("File loaded");
observer.complete();
};
});
observableBatch.push(myobservable);
reader.readAsArrayBuffer(file);
}
Observable.forkJoin(observableBatch)
.subscribe(
(m) => {
console.log(m);
},
(e) => {
console.log(e);
},
() => {
console.log("All file(s) loading completed!!!");
}
);
}
完全なサンプルコードは、私は1つのファイルを選択すると、onload
機能が実行されplunkr
で利用可能であり、私が選択したとき、私は、以下のコンソールログ
しかしを取得します複数のファイルonload
が一度だけ実行され、バッチ処理が完了しません。以下のコンソールログに
を参照してください誰かが、私は間違いを犯していた場合、私が理解するのに役立つことはできますか?
私のためには機能しません! –
FileReaderがインスタンス化するための引数を取らないため、新しいFileReader(file)が正しくありません。 –