我希望读取包含多个文件的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;
});
});
});这里没有定义‘这’,因为它是在jszip的上下文中执行的。也尝试了‘jszip同步’,但没有运气。谢谢你的帮助。
发布于 2018-08-20 06:23:24
只需将所有function (){}更改为()=>{},肥箭:
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() {}时,它通常会失去根元素的上下文,为了维护上下文,应该使用fat箭头。 你可以找到很多关于脂肪箭的伟大文章,我刚刚提供了其中之一。 直到箭头函数,每个新函数都定义了自己的这个值(基于函数的调用方式,构造函数的新对象,在严格模式函数调用中未定义的对象,如果函数被调用为“对象方法”,则为基对象,等等)。事实证明,使用面向对象的编程方式并不理想。 更详细
https://stackoverflow.com/questions/51925056
复制相似问题