2016-11-02 91 views
0

我不擅長英文,但我有一個關於使用jszip的問題。在這樣的代碼如何jszip異步zip文件,當很多單個文件需要zip時

for (var i = 0; i < files.length; i++) { 
 
        compressFiles(files[i], compressName); 
 
       }

function compressFiles(file,compressName) { 
 
     var fileContent = file.file; 
 
     var fileName = file.name; 
 
     var zip = new JSZip(); 
 
     zip.file(fileName, fileContent); 
 
     zip.generateAsync({ type: "blob" }).then(function (content) { 
 
      saveAs(content, compressName); 
 
     }); 
 
    }

我的問題是,當我在文件的文件是非常大的,大約88米。一些文件壓縮大約0米我猜是原因是異步,循環把文件流逐一放入內存,如果內存已滿,壓縮文件。那麼誰能告訴我真實的原因?謝謝!

回答

1

您可以使用數組來保持zip.file調用和jQuery.when等待它們全部完成,然後調用zip.generateAsync。下面的示例代碼。

幫助鏈接:
jQuery.when
What does $.when.apply($, someArray) do?

function zipFiles(images) { 
    var zip = new JSZip(); 
    deferreds = []; 
    images.forEach(function(image) { 
     deferreds.push(zip.file(image.name, image.data, { binary: true })); 
    }); 
    $.when.apply($, deferreds).then(function() { 
     zip.generateAsync({ type: "blob" }).then(function(content) { 
      saveAs(content, 'Filename.zip'); //FileSaver.js 
     }); 
    }); 
}