【发布时间】:2018-12-09 19:33:57
【问题描述】:
我尝试将作为目录上传的所有文件解析为单个文件数组。我有一个问题,我无法将所有承诺的结果合并到一个数组中。我得到了一个多维数组。
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 变量是一个多维数组。但是,我希望这个数组被展平(例如:[File(6148), Array(1), Array(0), File(14)])。我对回调和承诺不是很熟悉......因此,我在使用它们时遇到了一些问题。
编辑:
我在readEntries(dirReader, resolve, reject) 函数中犯了一个错字。应该有iterateThroughUploadedFiles而不是iterateThroughEntries函数。
【问题讨论】:
-
readEntries和getFile应该返回一个他们自己构建的承诺,而不是把resolve/reject作为回调。
标签: javascript arrays callback promise es6-promise