由于异步回调,变量被覆盖
variables are overwritten due to asynchronous callback
我正在尝试使用 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);}
});
}}
});
}
}
但是由于readdir
和readfile
函数的异步性质,索引变量 [J1] 和 [J2] 的值会发生变化,并且在 readfile
函数中传递了单个路径 [3][23]。
谁能想出出一条出路。
使用异步库。 async.each() 允许异步调用集合的 callbeack,当所有异步函数完成后,将调用主 calbcak
更新
async.map 在您的情况下会更好
由于索引变量在每个循环中都被覆盖,因此必须限定变量的范围。
这是你的情况
for(var i = 0; i < 3; i++) {
setTimeout(function(){
console.log(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);
}
也许这个例子可以帮助你得到这个想法
相关文章:
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- 在javascript中使用覆盖变量是不是一种糟糕的做法
- 由于异步回调,变量被覆盖
- 被覆盖的 setTimeout 变量中的函数
- 定义变量是否比在 JS 中覆盖变量使用更多的资源
- 异步Javascript变量覆盖
- 表,并选择要传递到新页面的rRow(id)(这样它就不会覆盖行选择的变量)
- 敲除js变量覆盖
- 返回语句后的函数声明全局变量不会被覆盖
- 在 forEach 循环中覆盖的变量
- 如何保护全局变量以在 Node.js 中被覆盖
- 两个函数使用相同的变量,都不会覆盖其原始变量
- nodejs / JavaScript 变量被覆盖
- 主干.js视图变量被覆盖
- 为什么在 JavaScript 中不能用函数变量覆盖字符串变量
- 全局 JSON 变量覆盖
- 试图在PHP中重现一些JavaScript代码,变量覆盖问题,如何
- 函数中未声明的JavaScript变量覆盖使用
- asp.net 用户控件中的 Javascript 变量 - 覆盖同一插入的用户控件中的变量
- 用局部变量覆盖全局变量