我在兑现承诺方面遇到了麻烦。我尝试了许多不同的方法来兑现承诺,但是我所做的任何事情都无法满足我的需要。我正在尝试在网页上拖放文件。我需要一个Set(this.files)中所有文件的列表,该列表传递给调用以上传文件。问题在于Promise.all在承诺完成之前就已经在运行。
我仍在努力地兑现承诺,所以也许我全都错了,但从我的所有研究看来,这应该行得通。任何帮助将不胜感激。
async dndDropFiles(event) {
event.preventDefault();
let ptable = [];
this.files = new Set();
if (event.dataTransfer.types[0] === "Files") {
var items = event.dataTransfer.items;
for (var i=0; i<items.length; i++) {
// webkitGetasEntry is where the magic happens
var item = await items[i].webkitGetasEntry();
if (item) {
ptable.push(new Promise(async resolve => {
resolve(await this.dndTraverseFileTree(item,""));
}))
}
}
Promise.all(ptable)
.then( (results) => {
if (this.files.size > 0) {
this.progress = this.uploadService.upload(this.files,this.currentDir,this.currentProject);
}
})
}
}
async dndTraverseFileTree(item,path) {
if (item.isFile) {
// Get file
item.file((file) => {
this.files.add(file);
});
} else if (item.isDirectory) {
// Get folder contents
let ptable = [];
var dirReader = await item.createReader();
dirReader.readEntries((entries) => {
for (var i=0; i<entries.length; i++) {
ptable.push(new Promise( async resolve => {
resolve(await this.dndTraverseFileTree(entries[i],path + item.name + "/"));
}));
}
Promise.all(ptable)
.then (results => {});
});
}
}