如何将递增的 for 循环变量传递给 node.js 中的函数
How can I pass an incrementing for-loop variable to a function in node.js?
可能的重复项:
如何在请求调用时将值传递给回调函数?
我知道这是一个普遍的问题,不仅在节点.js中。我必须将一个变量从 for 循环传递给我要生成的函数。这些函数存储在数组中,必须记住这些变量。
这是我的例子:
for(var i = 0; i < administratorIds.length; i ++){
adminCallbacks[adminCallbacks.length] = function(callback){
model_user.getById(administratorIds[i], function(user){
administrators[administrators.length] = {name: user.getName()};
callback(null, null);
});
};
}
也许
是闭包?
for(var i = 0; i < administratorIds.length; i ++){
adminCallbacks.push(
(function(i){
return function(callback){
model_user.getById(
administratorIds[i],
function(user){
administrators[administrators.length] = {name: user.getName()};
callback(null, null);
}
);
};
})(i)
);
}
哎呀...看看那种疯狂。无论如何,这部分:
(function(i){
// stuff!
})(i);
在闭包中捕获 i 的当前值,从而确保在触发回调后它不会更改。
举个例子:
var i = 10;
var lockedI = (function(i){
return function(){ console.log('i is --> ' + i); };
})(i);
var unlockedI = function(){ console.log('i is --> ' + i); };
lockedI();
// i is --> 10
unlockedI();
// i is --> 10
var i = 666;
lockedI();
// i is --> 10;
unlockedI();
// i is --> 666
胜利?
您需要为循环的每次迭代创建一个新的变量范围。
执行此操作的唯一方法是调用函数。
for(var i = 0; i < administratorIds.length; i++){
adminCallbacks[adminCallbacks.length] = createHandler(i); // pass i
}
// receive i as j-----v
function createHandler(j) {
// return a function...
return function(callback){
// ...that uses j-----------------v
model_user.getById(administratorIds[j], function(user){
administrators[administrators.length] = {name: user.getName()};
callback(null, null);
});
};
}
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 使用JS函数来使用另一个函数的语法?node.js
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- javascript函数中的异步与同步.(Node.js)
- 如何在不编写样板代码的情况下在Node中创建可重用函数
- 如何将某个“;函数“;在Node.js的网络应用程序中
- Node.js和同步API函数
- 如何在将Node异步函数转换为promise时使用Q库
- Node.js使变量等待分配,直到回调函数完成
- Node.js,为事件分配回调函数'数据'
- Node Express Handlebars帮助程序未返回函数的结果
- Node.js设计:多个异步函数使用作为闭包传递的函数写入数据库
- 在私有函数Node.js的函数中应用变量
- 使函数按顺序运行[Node JS]
- 在 Node.js 中脱离回调函数中的“for”循环
- 无法模拟在 node.js 中使用事件发射器刺激的类中的函数
- 为什么我不能在 node.js(浏览器化)的 require() 函数中使用变量作为参数
- 使用生成器函数 next() 作为 node.js 中的回调
- Chai 期望 [函数] 抛出一个(错误)未通过测试(使用 Node)
- 在异步环境中保证Node函数参数的安全