Search code examples
angularjseclipsehttprequestdelayjszip

How to apply delay in JSZip API to load?


How to apply delay in JSZip API ? I want to zip multiple file. but I want to add some delay between transferring the files from webserver. How to add delay in below code?

This is for browser and deploying binaries inside the device.

 $scope.download = function () {
            var urls = ["/FILES/AlertLog.txt",
        "/FILES/AuditLog.txt",
        "/FILES/TotLog.txt",
       "/FILES/Historian.csv",
        "/FILES/History2.csv",
        "/FILES/Factory.cfg",
        "/FILES/SLog.txt",
        "/FILES/se.dump",
        "/FILES/AssertLog.txt",
        "/FILES/History2.csv",
        "/FILES/History3.csv",
         "/FILES/History4.csv"
        ];
    compress_files(urls);
}

function compress_files(urls) {
    var zip = new JSZip();
    var deferreds = [];
    for (var i = 0; i < urls.length; i++) {
     $timeout(function(){  deferreds.push(addToZip(zip, urls[i], i));
    },200);// issue to deferreds variable =>undefined
    $.when.apply(window, deferreds).done(generateZip);
}

function addToZip(zip, url, i) {
    var deferred = $.Deferred();
    JSZipUtils.getBinaryContent(url, function (err, data) {
        if(err) {

            deferred.resolve(zip); 
        }
        else {
            var arr=url.split("/");
            zip.file(arr[2], data, { binary: true });
            deferred.resolve(zip);
        }
    });
    return deferred;                                    
}

add some delay of milliseconds between transferring the files from the webserver.


Solution

  • I am trying to download the individual file by giving some delay. It fixed my problem

    function downloadAll(files){
    if(files.length == 0) return;
    file = files.pop();
    var theAnchor = $('<a />')
        .attr('href', file[1])
        .attr('download',file[0])
        // Firefox does not fires click if the link is outside
        // the DOM
        .appendTo('body');
    
    theAnchor[0].click(); 
    theAnchor.remove();
    downloadAll(files); }
    function downloadAll(files){
    if(files.length == 0) return;
    file = files.pop();
    var theAnchor = $('<a />')
        .attr('href', file[1])
        .attr('download',file[0])
        // Firefox does not fires click if the link is outside
        // the DOM
        .appendTo('body');
    
    theAnchor[0].click(); 
    theAnchor.remove();
    downloadAll(files);
    }
    
    $('a.download-csv').on('click', function(){
    downloadAll([
        ['file1.csv', 'data:text/csv;charset=utf8,'+
                  encodeURIComponent('my,csv,file\and,so,on')],
        ['file2.txt', 'data:text/plain;charset=utf8,'+
                  encodeURIComponent('this script can do what I need.')],
        ['file3.js', 'data:text/javascriptcharset=utf8,'+
                  encodeURIComponent('alert(\'You can donate me your house if you like this script :-) \')')]
    ]);
    });