Консоль браузера выполняет ленивую оценку. Попробуйте сделать:
console.log(JSON.stringify(images));
console.log(images[0]);
вы увидите его как пустой массив.
В вашем случае, когда вы вручную нажимаете на консольный журнал «images», файл загружается и вы видите содержимое.
Поскольку вам необходимо прочитать все файлы и выполнить окончательную эмиссию, сделайте все события чтения файла как наблюдаемые,
создайте массив, как только все Обзоры будут завершены.
public onFileSelected(event): void {
let loadenedObs = this._createFileReaderObs(event);
forkJoin(...loadenedObs).subscribe(() => {
// all the files are read, emit the array now.
this.images.emit(this.loadedImagesAsURL);
})
}
private _createFileReaderObs(event): [] {
let obsArr = [];
const filesList = event.target.files;
for (const file of filesList) {
const reader = new FileReader();
const loadenedEventObs = fromEvent(reader, 'loadend').pipe(
tap(() => {
this.loadedImagesAsURL.push(reader.result);
}),
take(1) // take one event to complete the Observable
);
obsArr.push(loadenedEventObs); // create an array of loadened observables.
reader.readAsDataURL(file);
}
return obsArr;
}