我觉得我必须遗漏一些明显的东西,但我似乎无法找到它。
在nodejs中,如何将其他参数传递给回调函数?
fs = require('fs');
for(var i = 0; i < 5; i++){
fs.readFile(filePath, function(err, data){
console.log(i);
});
}
这样做你通常会把一堆4写在屏幕上。我理解为什么会这样。它正在发生,因为这是&#39; i&#39;当它到达所有回调代码的那一部分时。这不起作用:
fs = require('fs');
for(var i = 0; i < 5; i++){
fs.readFile(filePath, callback(err, data, i));
}
function callback(err, data, i){
console.log(i);
}
as&#39; err&#39;和&#39;数据&#39;未定义。我也理解为什么会这样。
这适用于&#39; i&#39;但后来我失去了我需要的错误和数据值。
fs = require('fs');
for(var i = 0; i < 5; i++){
fs.readFile(filePath, callback(i))
}
function callback(num){
console.log(num);
}
我该如何解决这个问题?
答案 0 :(得分:2)
尝试将其包装在自执行匿名函数中:
fs = require('fs');
for(var i = 0; i < 5; i++){
(function(i) {
fs.readFile(filePath, function(err, data){
console.log(i);
});
})(i)
}
另外,请记住这种方法不会扩展。例如,如果您尝试将for循环设置为1000,它将尝试同时进行所有1000个readFile调用。您最好使用异步库之类的东西,以确保您不会同时运行过多的IO操作。
答案 1 :(得分:2)
最简单的方法是使用立即调用的函数表达式(IIFE):
fs = require('fs');
for(var i = 0; i < 5; i++){
(function(i){
fs.readFile(filePath, function(err, data){
console.log(i);
});
})(i);
}
这会在匿名闭包内的每次迭代中“捕获”i
的值。