读取zip文件内容并将其分配给局部变量

时间:2018-08-20 06:21:10

标签: angular typescript

我想读取包含多个文件的zip文件的内容,并合并所有文件中的内容,并将其分配给局部变量。但是本地变量不在以下代码的范围内:

const jsZip = require('jszip');
  jsZip.loadAsync(fileList[0]).then(function (zip) {
    Object.keys(zip.files).forEach(function (filename) {
      zip.files[filename].async('string').then(function (fileData) {
         this.fileData = this.fileData + '**$$##$$**' + fileData;
      });
    });
  });

'this'在这里未定义,因为这是在使用jszip的上下文中执行的。还尝试了“ jszip-sync”,但没有运气。感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

只需将所有function (){}更改为()=>{} Fat Arrow

const jsZip = require('jszip');
  jsZip.loadAsync(fileList[0]).then((zip) => { // <----- HERE
    Object.keys(zip.files).forEach((filename) => { // <----- HERE
      zip.files[filename].async('string').then((fileData) => { // <----- HERE
         this.fileData = this.fileData + '**$$##$$**' + fileData;
      });
    });
  });
  

原因,它不起作用:,但是当您使用function() {}时,   通常它会失去根元素的上下文,以保持   上下文中,您应该使用粗箭头。

     

您可以找到许多有关胖箭头的精彩文章,我只是   提供了其中之一。

     

直到箭头函数,每个新函数都定义了自己的this值(根据函数的调用方式,对于新对象,则为   构造函数,在严格模式函数调用中未定义,基础对象   如果该函数被称为“对象方法”等)。这证明了   面向对象的编程风格不理想。    More in detail