将其他参数传递到回调函数中
Passing Additional Arguments into a Callback Function
我觉得我一定错过了一些明显的东西,但我似乎找不到它。
在 nodejs 中,如何将其他参数传递到回调函数中?
fs = require('fs');
for(var i = 0; i < 5; i++){
fs.readFile(filePath, function(err, data){
console.log(i);
});
}
这样做,你通常会在屏幕上写一堆4。我理解为什么会这样。它之所以发生,是因为当它到达所有回调的代码部分时,这就是"i"的值。这也不起作用:
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);
}
因为"错误"和"数据"未定义。我也理解为什么会这样。
这适用于"i",但随后我丢失了所需的错误和数据值。
fs = require('fs');
for(var i = 0; i < 5; i++){
fs.readFile(filePath, callback(i))
}
function callback(num){
console.log(num);
}
我该如何解决这个问题?
尝试将其包装在自执行的匿名函数中:
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 操作。
最简单的方法是使用立即调用的函数表达式 (IIFE):
fs = require('fs');
for(var i = 0; i < 5; i++){
(function(i){
fs.readFile(filePath, function(err, data){
console.log(i);
});
})(i);
}
这会在匿名闭包内的每次迭代中"捕获"i
的值。
相关文章:
- 如何将一个JavaScript函数回调为多个函数
- Meteor:异步函数回调异常:onAfterAction
- 从类方法中的 ajax post 函数回调函数更改 javascript 类属性
- jQuery动画函数回调错误
- jquery在html属性中添加函数回调,以便在其他事件中调用
- jquery getjson 函数:回调返回错误的字符串
- postMessage - 多个 postMessage 事件/函数/回调
- 在 Promise 调用的错误函数回调后附加对象的用法是什么
- 单击事件后的 JavaScript 函数回调
- 设置超时函数回调静态变量
- Jquery UI 模式匿名函数回调以打开对话框
- 函数回调、局部变量和 chrome.storage.sync.get
- Jquery Ajax 没有拾取选项参数中指定的函数回调
- 如何在 javascript 中进行函数回调
- 用函数回调封装JavaScript
- jQuery JavaScript嵌套异步函数回调
- Node.js-匿名函数回调
- 函数回调超出范围
- php代码的Javascript函数回调
- 如何使用函数回调在更改时提交表单