Looping through files for FileReader, output always contains last value from loop

后端 未结 6 1471
花落未央
花落未央 2020-11-30 20:04

I\'m using FileReader API to read files on local.



        
6条回答
  •  感情败类
    2020-11-30 20:45

    I think the best way to solve this problem is by recursively call a function that reads the blob file. So in my case I solve the problem with the following snippet code, maybe is a little complicated but it works in any scenario that I tried.

    Notice that, I didn't pass the array and index as arguments. You need to call them with the object they belong to.

    //Initialize blobs
    var foo = new Blob(["Lorem ipsum dolor sit amet, consectetur adipiscing elit."], {
        type: 'text/plain'
    });
    var bar = new Blob(["Sed tristique ipsum vitae consequat aliquet"], {
        type: 'text/plain'
    });
    //Initialize array and index
    var arrayOfBlobs = [foo, bar];
    var arrayIndex = 0;
    
    function fileRead () {
        var me = this;
        if (this.arrayIndex < this.arrayOfBlobs.length) {
            var reader = new FileReader();
    
            function bindedOnload(event) {
                console.log("bindedOnload called");
                console.log("reader results: ", event.target.result);
                this.arrayIndex++; //Incrument the index
                this.fileRead(); //Recursive call
            }
            //By Binding the onload event to the local scope we
            //can have access to all local vars and functions
            reader.onload = bindedOnload.bind(me);
            reader.readAsText(this.arrayOfBlobs[arrayIndex]);
        } else {
            //This will executed when finishing reading all files
            console.log("Finished");
        }
    }
    
    //Call the fileRead for the first time
    fileRead();
    

提交回复
热议问题