Я пытаюсь рекурсивно читать файлы из удаленной папки.
onDrop(event) {
event.preventDefault();
this.folderData = [];
this.filesData = [];
const items = event.dataTransfer.items;
for (let i = 0; i < items.length; i++) {
const item = items[i].webkitGetAsEntry();
if (item) {
this.scanFiles(item, this.folderData);
}
}
// send out data
// this.dropped.emit({ folderData: this.folderData, filesData: this.filesData });
}
private scanFiles(item, container: Array<any>) {
const nodeData = {
name: item.name,
isDirectory: item.isDirectory,
item: item,
children: []
};
container.push(nodeData);
if (item.isDirectory) {
const directoryReader = item.createReader();
directoryReader.readEntries(entries => {
if (entries) {
entries.forEach(entry => this.scanFiles(entry, nodeData.children));
}
});
} else if (item.isFile) {
// How to return an Observable array here?
item.file(file => {
file.fullPath = item.fullPath;
this.filesData.push(file);
});
}
}
Согласно MDN, FileSystemFileEntry.file возвращает результат в обратном вызове.
https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry/file
Таким образом, прежде чем onDrop отправит результат, он должен дождаться завершения всех обратных вызовов FileSystemFileEntry.file.
Я хочу использовать Observable.forkJoin для достижения этой цели. Но перед этим, как обернуть FileSystemFileEntry.file в функцию, которая возвращает Observable?