在node.js

时间:2016-05-13 13:31:01

标签: javascript node.js settimeout pass-by-reference

node.js新手在这里。我循环遍历一个对象数组,并设置超时以分别使用每个对象执行一些操作,每个对象的超时也取决于对象中的某些键值。代码在这里:

for (var idx in arr) {
var obj = arr[idx];
interval = obj['key'];
setTimeout(function(){my_func(obj);}, interval);
}

现在失败的是,每当发生超时并调用my_func的代码块时,它总是作用于数组中的最后一个对象,可能是因为变量' obj'那个时候指向它。我该如何解决这个问题?我猜我需要通过引用传递,或类似的东西。如果我在这里遗漏了什么,请指出正确的方向。

1 个答案:

答案 0 :(得分:0)

您需要使用闭包:

for (var idx in arr) {
  var obj = arr[idx];

  (function( obj ){
    interval = obj['key'];
    setTimeout(function(){my_func(obj);}, interval);
  })( obj );
}//for()