From 42ad3d671c7367511a5f6a6329236aacad90b540 Mon Sep 17 00:00:00 2001 From: zombiej Date: Fri, 15 Feb 2019 12:27:00 +0800 Subject: [PATCH] loop all the files --- src/traverseFileTree.js | 33 +++++++++++++++++++++++++++------ tests/uploader.spec.js | 10 +++++++++- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/traverseFileTree.js b/src/traverseFileTree.js index f4e538db..3e16437e 100644 --- a/src/traverseFileTree.js +++ b/src/traverseFileTree.js @@ -1,3 +1,26 @@ +function loopFiles(item, callback) { + const dirReader = item.createReader(); + let fileList = []; + + function sequence() { + dirReader.readEntries((entries) => { + const entryList = Array.prototype.slice.apply(entries); + fileList = fileList.concat(entryList); + + // Check if all the file has been viewed + const isFinished = !entryList.length; + + if (isFinished) { + callback(fileList); + } else { + sequence(); + } + }); + } + + sequence(); +} + const traverseFileTree = (files, callback, isAccepted) => { const _traverseFileTree = (item, path) => { path = path || ''; @@ -8,12 +31,10 @@ const traverseFileTree = (files, callback, isAccepted) => { } }); } else if (item.isDirectory) { - const dirReader = item.createReader(); - - dirReader.readEntries((entries) => { - for (const entrieItem of entries) { - _traverseFileTree(entrieItem, `${path}${item.name}/`); - } + loopFiles(item, (entries) => { + entries.forEach((entryItem) => { + _traverseFileTree(entryItem, `${path}${item.name}/`); + }); }); } }; diff --git a/tests/uploader.spec.js b/tests/uploader.spec.js index 922d8733..4b7f7bb0 100644 --- a/tests/uploader.spec.js +++ b/tests/uploader.spec.js @@ -22,8 +22,16 @@ const makeFileSystemEntry = (item) => { handle(new Item(item.name)); }, createReader: () => { + let first = true; return { - readEntries: handle => handle(item.children.map(makeFileSystemEntry)), + readEntries(handle) { + if (!first) { + return []; + } + + first = false; + return handle(item.children.map(makeFileSystemEntry)); + }, }; }, };