2016-05-13 3 views
0

node.js newbie here。私はオブジェクトの配列をループしており、各オブジェクトを個別に使用していくつかの操作を実行するためのタイムアウトを設定していますが、各オブジェクトのタイムアウトはオブジェクト内のいくつかのキー値にも依存します。コードはここにある:node.jsの配列内のすべての要素のタイムアウトを設定します。

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

今ここで失敗しているものは、おそらく可変のため、タイムアウトが発生し、my_funcのためのコードブロックが呼び出されるたびに、それは常に配列の最後のオブジェクトに作用するということである "objのその時点でそれを指しています。これをどうやって回避するのですか?私は参照渡しが必要であると推測しています。私がここで何かを逃している場合は、正しい方向に私を指摘してください。

+0

。 Btw、これは "参照渡し"(これはJavaScriptにはありません)とは関係ありません。 –

答えて

0

あなたはこのためにクロージャを使用する必要があります:代わりに `var`と、問題のlet`が解決されます`使用し、あなたがノードを使用しているので

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

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

コードは正しいですが、説明はありません。閉鎖の仕方はここで*問題*です。 'setTimeout'に渡された関数はすでにクロージャです。私たちに必要なのは、反復と呼び出し*関数ごとに新しいスコープ*があるということです。 *その*関数がクロージャかどうかはほとんど無関係です。 –

+0

ありがとうございました。私はフェリックスに同意するだろう。このリンクは私の問題を解決しました。ほとんどの場合、皆さんがここで示唆しているものに沿っています。 http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – Chetan

+0

大丈夫です。ありがとう@FelixKling、私はそれをもっと調べようとします。 –

関連する問題