Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSZip VUE如何解析承诺数组并保存为局部变量_Javascript_Vue.js_Async Await_Promise_Jszip - Fatal编程技术网

Javascript JSZip VUE如何解析承诺数组并保存为局部变量

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

没有使用过异步函数,所以我有点迷路了。。。 我试图完成的是使用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;
      }
    });
  })
}
提取(事件){
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[]
)。