Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中不同输入文件之间的比较,无法到达全局变量_Javascript_Asynchronous - Fatal编程技术网

javascript中不同输入文件之间的比较,无法到达全局变量

javascript中不同输入文件之间的比较,无法到达全局变量,javascript,asynchronous,Javascript,Asynchronous,我试图打开不同的JSON文件,并比较彼此的值 为了做到这一点,我过去常常阅读文件。但我试图将所有数据保存在全局变量“data”中。我认为这是一个异步错误,但我对javascript非常陌生,不知道错误从何而来 这是我的密码: var data = {} function readmultifiles(files) { var reader = new FileReader(); function readFile(index) { if( index >=

我试图打开不同的JSON文件,并比较彼此的值

为了做到这一点,我过去常常阅读文件。但我试图将所有数据保存在全局变量“data”中。我认为这是一个异步错误,但我对javascript非常陌生,不知道错误从何而来

这是我的密码:

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'

});
会发生什么?当我试图观看“数据”时,firefox控制台会向我显示对象,但我无法观看对象内部


我需要做什么来制定一个好的解决方案。我应该使用计时器来等待吗?

我发现我可以这样设置计时器:setTimeout(function(){console.log(“index2”)console.log(data);console.log(data['task_1']);},500);然后我可以看到所有的数据,但我不认为这是解决这个问题的最好和更智能的解决方案。我看到我可以像这样设置一个计时器:setTimeout(function(){console.log(“index2”)console.log(data);console.log(data['task_1']);},500);然后我可以看到所有的数据,但我不认为这是最好和更聪明的解决方案。