我想读取包含多个文件的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”,但没有运气。感谢您的帮助。
答案 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