【发布时间】:2021-07-03 11:33:05
【问题描述】:
没有使用异步函数,所以我有点迷失在这里...... 我想要完成的是使用 JSZip 遍历 zip 文件中的文件夹中的文件,将这些文件保存在一个数组中,然后对它们进行排序,将它们保存到一个局部变量中,以便我可以进一步发送它们。
这是我得到一系列承诺的代码:
async extractTests(file){
let Zip = new JSZip();
let tests = await Zip.loadAsync(file).then((zip) => {
const promises = [];
zip.folder("tests").forEach(async function (relativePath, file) {
promises.push({ name: relativePath, data: await zip.file("tests/" + relativePath).async("text") });
});
return promises;
})
return tests;
}
然后我尝试在添加 zip 文件时运行的事件函数中对数组进行排序:
extract(event) {
const file = event.target.files[0];
let res = this.extractTests(file);
res.then(function (r) {
res.sort(function (a, b) {
var nameA = a.name.toUpperCase();
var nameB = b.name.toUpperCase();
console.log(a.name);
if (nameA < nameB) {
return -1;
}
else {
return 1;
}
});
})
}
需要对列表进行排序,因为它以错误的顺序解析 - 据我所知,排序函数甚至不会触发 - 很确定它与异步函数有关。 排序将适用于局部变量,对我来说将数组保存为局部变量会更简单 - 那么我该如何做到这一点并解决承诺。
提前致谢
【问题讨论】:
-
在
extract()中,res.sort应该是r.sort(res是Promise,r是解析后的Promise[])。
标签: javascript vue.js async-await promise jszip