1

I'm trying to open different JSON files and compare each others values.

To do it, I used this to read the files. But I'm trying to save every data in a global variable 'data'. I think it's a asynchronous mistake but I'm pretty new to javascript and I didn't understand where the error come from.

Here is my code :

var data = {}
function readmultifiles(files) {
    var reader = new FileReader();

    function readFile(index) {
        if( index >= files.length ) return;
        var file = files[index];
        reader.onload = function(e) {  
            // get file content  
            var bin = e.target.result;
            bin = JSON.parse(bin);
            for(task in bin['values']){
                addData(bin['info']['date'],task,bin['values'][task]);
            }
            // do sth with bin
            readFile(index+1);
        }
        reader.readAsBinaryString(file);

    }

    readFile(0);
    console.log("readmultifiles");
    console.log(data);
    return data;
}

function addData(date, task, value){
    if(data[task] == undefined){
        data[task] = {};
    }
    data[task][date] = value;
}

var fileInput = document.querySelector('#file');
fileInput.addEventListener('change', function() {
    console.log(fileInput);

    var files = fileInput.files;
    readmultifiles(files);
    console.log("index");
    console.log(data);
    console.log(data['task_1']); // I can't display this object because 'undefinned'

});

What happens? When I'm trying to watch 'data', firefox console display me the object but I cannot watch inside the object.

Firefox display

What do I need to do to make a good solution. Should I use timers to wait?

Dams
  • 61
  • 7
  • I see that i could set a timer like this : setTimeout(function() { console.log("index2") console.log(data); console.log(data['task_1']); }, 500); Then I could see all the data, but I don't think it's the best and smarter solution to this. – Dams Apr 29 '20 at 15:24

0 Answers0