Node.js循环打印顺序错误
Node.js loop printing in wrong order
我试图显示一些数据从一对夫妇的文件在一个目录中,但是有内容打印出错误的顺序。
fs.readdir('files/sets', function(err, files){
for(var i = 0; i < files.length; i++){
console.log("_______________________________");
readFile(files[i]);
}
});
function readFile(file){
csv()
.from.path('files/training_set/'+file, {delimiter: ','})
.transform(function(row){
console.log(row);
});
}
每个文件包含两行:
文件:John:
Hey there!
文件二:Mary:
Whats up!
我希望输出类似于
____________________
John
Hey there!
____________________
Mary
Whats up!
但是我实际上得到
____________________
____________________
John
Mary
Hey there!
Whats up!
我一直在搜索,认为这与异步函数和循环快有关。但我似乎无法解决这个问题。我试过下面的方法,但结果都是一样的。
fs.readdir('files/sets', function(err, files){
for(var i = 0; i < files.length; i++){
(function(j){
console.log("_______________________________");
readFile(files[j]);
})(i)
}
});
readFile
是一个异步操作,您试图同步运行它而不等待回调完成:
var async = require('async'); // npm install async
fs.readdir('files/sets', function(err, files){
async.eachSeries(files,readFile,function(err){
// more async stuff ...
});
});
function readFile(file,callback){
console.log("_______________________________");
csv()
.from.path('files/training_set/'+file, {delimiter: ','})
.transform(function(row){
console.log(row);
}).on('close',function() {
callback();
});
}
另外,如果您需要等待上一个文件完成,则必须串联运行它。
是的,您正在看到异步处理的结果。您不希望一次只写一行,因为您通常会得到分散的文件的输出。相反,您只希望在对console.log的单个调用中将文件的整个输出写入控制台。
我认为这应该可以工作:
fs.readdir('files/sets', function(err, files){
for (var i = 0; i < files.length; i++){
readFile(files[i]);
}
});
function readFile(file){
var outStr = "_______________________________";
csv()
.from.path('files/training_set/'+file, {delimiter: ','})
.transform(function(row){
outStr += ''n' + row;
})
.on('end', function(){
console.log(outStr);
});
}
相关文章:
- Javascript执行顺序错误
- 带有 CommonsChunkPlugin 的 Webpack 会导致 html 文件中的捆绑顺序错误
- ES6模块初始化顺序错误
- 在Firefox中的keydown事件中隐藏元素时焦点顺序错误
- 使用 JS 填充 HTML 表,数据顺序错误
- JavaScript 排序顺序错误
- ReactJS:Dom 渲染顺序错误
- kafka节点的消息顺序错误
- 角度指令后链接顺序错误(1.3)
- 循环运行顺序错误的Javascript
- AJAX调用顺序错误(异步)javascript
- node.js(谷歌日历api,mongojs)中循环的顺序错误
- Angular2-NgFor内部树模型:删除然后添加元素时顺序错误
- 数组填充顺序错误
- ASP.. Net MVC jQuery和插件加载顺序错误
- 在wordpress子主题中排队脚本顺序错误
- Var和function的工作顺序错误
- 使用LABjs的执行顺序错误
- 函数执行顺序错误
- Cookie和模态发送报头顺序错误