Я пытаюсь разобрать все файлы, которые были загружены как каталог загрузки в один массив файлов. У меня проблема, что я не могу объединить результат всех обещаний в один массив. Вместо этого я получаю многомерный массив.
function iterateThroughUploadedFiles(files, isEntry = false) {
var promises = [];
for (let i = 0; i < files.length; i++) {
let entry = isEntry ? files[i].webkitGetAsEntry() : files[i];
if (entry.isFile) {
promises.push(new Promise(function(resolve, reject) {
getFile(entry, resolve, reject);
}));
}
else if (entry.isDirectory) {
let dirReader = entry.createReader();
var promise = new Promise(function(resolve, reject) {
readEntries(dirReader, resolve, reject);
});
promises = promises.concat(promise);
}
}
return Promise.all(promises);
}
function getFile(fileEntry, resolve, reject) {
fileEntry.file(function(file) {
resolve(file)
});
}
function readEntries(dirReader, resolve, reject) {
dirReader.readEntries(function (entries) {
resolve(iterateThroughEntries(entries).then(function(result) {
return result;
}));
});
}
Использование:
iterateThroughUploadedFiles(files, true).then(function(result) {
console.log(result);
});
Когда я выполняю функцию iterateThroughUploadedFiles
, переменная result
является многомерным массивом. Однако я хочу, чтобы этот массив был сглажен (пример: [Файл (6148), Массив (1), Массив (0), Файл (14)] ). Я не очень знаком с обратными вызовами и обещаниями ... поэтому у меня есть некоторые проблемы с ними.
Редактировать:
В функции readEntries(dirReader, resolve, reject)
я сделал опечатку. Должна быть iterateThroughUploadedFiles
вместо iterateThroughEntries
функция.