ESSAY / NOTE

NodeJS中的循环陷阱

Node.js的异步机制由事件和回调函数实现,一开始接触可能会感觉违反常规,但习惯以后就会发现还是很简单的。 然而这之中其实暗藏不少陷阱,一个很容易遇到的问题就是回到循环的回调函数。 eq: var fs=require('fs'); var files=['a.txt','b.txt','c.txt']; for(var i=0;i<files.length;i++){ fs.readFile(file[i],'utf-8',function(err,contents){ console.log(files); console.log(i); console.log(files[i]); }) } 实际运行的结果如下: ['a.txt','b.txt','c.txt'] 3 undefined ['a.txt','b.txt','c.txt'] 3 undefined ['a.txt','b.txt','c.txt'] 3 undefined 解决方法如下: var fs=require('fs'); var files=['a.txt','b.txt','c.txt']; files.forEach(function(filename){ fs.readFile(filename,'utf-8',function(err,contents){ console.log(filename+":"+contents); }) })