Javascript JSZip VUE如何解析承诺数组并保存为局部变量
没有使用过异步函数,所以我有点迷路了。。。 我试图完成的是使用JSZip迭代zip文件中的文件夹中的文件,将这些文件保存在数组中,然后对它们进行排序,将它们保存到局部变量中,以便我可以进一步发送它们 以下是我的代码,我从中获得了一系列承诺:Javascript JSZip VUE如何解析承诺数组并保存为局部变量,javascript,vue.js,async-await,promise,jszip,Javascript,Vue.js,Async Await,Promise,Jszip,没有使用过异步函数,所以我有点迷路了。。。 我试图完成的是使用JSZip迭代zip文件中的文件夹中的文件,将这些文件保存在数组中,然后对它们进行排序,将它们保存到局部变量中,以便我可以进一步发送它们 以下是我的代码,我从中获得了一系列承诺: async extractTests(file){ let Zip = new JSZip(); let tests = await Zip.loadAsync(file).then((zip) => { const promise
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;
}
});
})
}
提取(事件){
const file=event.target.files[0];
设res=this.extractTests(文件);
res.then(函数(r){
res.sort(函数(a,b){
var nameA=a.name.toUpperCase();
var nameB=b.name.toUpperCase();
console.log(a.name);
if(nameA
需要对列表进行排序,因为它以错误的顺序得到解决-据我所知,排序函数甚至没有启动-非常确定这与异步函数有关。
排序将对局部变量起作用,而将数组保存为局部变量对我来说要简单得多——那么我如何才能做到这一点并解决这些问题呢
提前感谢在高阶函数上使用
async
/wait
是非常不受鼓励的,并且可能导致不可预测的行为,即您的代码似乎可以工作,但实际上只会触发一些异步调用,而不提供所需的输出
如果没有相同库的存档结构,我无法确定是否再现该问题,但您可以尝试按如下方式更改提取功能:
async function extractTests(file: any) {
let Zip = new JSZip();
let tests = await Zip.loadAsync(file)
.then((zip) => {
const promises = [];
zip.folder("tests")
.forEach(function (relativePath, file) { // removed async function
promises.push(
zip.file("tests/" + relativePath)
.async("text")
.then((data) => { // replaced with Promise fulfilment data update
return { name: relativePath, data: data }
})
);
});
return promises;
})
return Promise.all(tests); // Resolve all promises in parrallel
}
在extract()
中,res.sort
应该是r.sort
(res
是Promise
,而r
是已解析的Promise[]
)。