Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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_Node.js_Asynchronous_Concurrency - Fatal编程技术网

Javascript 由于异步回调,变量被覆盖

Javascript 由于异步回调,变量被覆盖,javascript,node.js,asynchronous,concurrency,Javascript,Node.js,Asynchronous,Concurrency,我正在尝试使用node.js从文件系统访问多个文件。由于我正在尝试处理大量数据,并且它们的处理顺序无关紧要,因此我希望使用回调以异步方式进行处理。我已经编写了以下代码 var fs = require('fs'); var basic_path="E:\\alphaDownload\\2016\\03"; var D1 = ['\\01','\\02','\\03','\\04']; var D2 = ['\\00','\\01','\\02','\\03','\\04','\\05','\\

我正在尝试使用node.js从文件系统访问多个文件。由于我正在尝试处理大量数据,并且它们的处理顺序无关紧要,因此我希望使用回调以异步方式进行处理。我已经编写了以下代码

var fs = require('fs');

var basic_path="E:\\alphaDownload\\2016\\03";
var D1 = ['\\01','\\02','\\03','\\04'];
var D2 = ['\\00','\\01','\\02','\\03','\\04','\\05','\\06','\\07','\\08','\\09','\\10','\\11','\\12','\\13','\\14','\\15','\\16','\\17','\\18','\\19','\\20','\\21','\\22','\\23'];

var path=new Array(4);
for (var i=0;i<path.length;i++){
    path[i]=new Array(24);
}

for (var j1=0; j1<D1.length; j1++){
    for (var j2=0; j2<D2.length; j2++){
            path[j1][j2]=basic_path+D1[j1]+D2[j2];

            fs.readdir(path[j1][j2], function(err,items) {
                console.log("=============="+path[j1][j2]+"================");  
                console.log(items);
                if(err){throw err;}
                else{for (var i=0; i<items.length; i++) {
                    fs.readFile(path[j1][j2]+'\\'+items[i],'utf8',function read(error, data){
                        if (error) {
                            console.log("-------**"+error);
                        }
                        else {
                            console.log(data);}
                    });

                }}
            });

    }
}
var fs=require('fs');
var basic_path=“E:\\alphaDownload\\2016\\03”;
变量D1=['\\01','\\02','\\03','\\04'];
变量D2=['\\00'、'\\01'、'\\02'、'\\03'、'\\04'、'\\05'、'\\06'、'\\07'、'\\08'、'\\09'、'\\10'、'\\11'、'\\12'、'\\13'、'\\14'、'\\15'、'\\16'、'\\17'、'\\18'、'\\19'、'\\20'、'\\21'、'\\22'、'\\23';
var路径=新数组(4);
对于(var i=0;iUse library.async.each(),允许异步调用集合的callbeack,当所有异步函数完成时,将调用主calbcak

更新

在您的情况下会更好

使用library.async.each()允许异步调用集合的callbeack,并且当所有异步函数完成时,将调用主calbcak

for(var i = 0; i < 3; i++) {
  setTimeout(function(){
    console.log(i);
  }, 100);
}
更新


在您的情况下会更好

因为索引变量在每个循环中都被覆盖,所以您必须确定变量的范围

for(var i = 0; i < 3; i++) {
  setTimeout(function(){
    console.log(i);
  }, 100);
}
这是你的案子

for(var i = 0; i < 3; i++) {
  setTimeout(function(){
    console.log(i);
  }, 100);
}
for(变量i=0;i<3;i++){
setTimeout(函数(){
控制台日志(i);
}, 100);
}
这里有两种方法

for(var i = 0; i < 3; i++) {
  setTimeout(function(n){
    console.log(n);
  }.bind(this, i), 100);
}

for(var i = 0; i < 3; i++) {
  setTimeout((function(n){
    return console.log(n);
  })(i), 100);
}
for(变量i=0;i<3;i++){
设置超时(函数(n){
控制台日志(n);
}.bind(本,i),100);
}
对于(变量i=0;i<3;i++){
setTimeout((函数(n){
返回控制台.log(n);
})(i) ,100);
}

也许这个例子可以帮助您理解这个想法

因为索引变量在每个循环中都被覆盖,所以您必须确定变量的范围

这是你的案子

for(var i = 0; i < 3; i++) {
  setTimeout(function(){
    console.log(i);
  }, 100);
}
for(变量i=0;i<3;i++){
setTimeout(函数(){
控制台日志(i);
}, 100);
}
这里有两种方法

for(var i = 0; i < 3; i++) {
  setTimeout(function(n){
    console.log(n);
  }.bind(this, i), 100);
}

for(var i = 0; i < 3; i++) {
  setTimeout((function(n){
    return console.log(n);
  })(i), 100);
}
for(变量i=0;i<3;i++){
设置超时(函数(n){
控制台日志(n);
}.bind(本,i),100);
}
对于(变量i=0;i<3;i++){
setTimeout((函数(n){
返回控制台.log(n);
})(i) ,100);
}

也许这个例子可以帮助你理解这个想法

谢谢大家。解决了它。谢谢大家。解决了它