У меня есть этот метод, который вызывает callback () для каждого файла, который сбрасывается в некоторый контейнер.
Однако, если отбрасывается несколько файлов, этот метод будет вызывать callback () для каждого файла.
Как мне превратить это в синхронную функцию, чтобы callback () вызывался только один раз внутри этого метода, после того как все файлы были прочитаны? Я попробовал несколько асин c / await magi c, но безуспешно.
TL; DR: я хотел бы преобразовать этот метод в callback () только один раз со ВСЕМИ файлами , в конце, когда все файлы и подфайлы каталога были прочитаны в некоторый массив.
onDropFiles = e => {
e.preventDefault();
const { callback } = this.props;
const items = e.dataTransfer.items;
if (!items.length) {
return;
}
const traverseFileTree = item => {
if (item.isFile) {
item.file(file => {
callback([file]);
});
return;
}
const dirReader = item.createReader();
dirReader.readEntries(entries => {
for (let i = 0; i < entries.length; i++) {
traverseFileTree(entries[i]);
}
});
};
for (let i = 0; i < items.length; i++) {
traverseFileTree(items[i].webkitGetAsEntry());
}
}