如何在请求调用时将值传递给callback函数?

我有以下情况:

var foo = [ 0, 1, 2 ] for (var i in foo) { Asyncstuff.get(URI).on('response', function(res) { console.log(i); } }); } 

因为.on('response',…)是以asynchronous方式调用的,所以输出很可能是

 2 2 2 

在.get()被调用到callback函数时是否有可能传递的值?

你需要closures。 有比这更好的方法,但这应该清楚地表明这个概念:

 var foo = [ 0, 1, 2 ] for (var i in foo) { (function(i){ Asyncstuff.get(URI).on('response', function(res) { console.log(i); } }); })(i); } 

正如cwolves所提到的,你需要用闭包来包装它。 原因是在JavaScript和其他语言(如:C#)封闭捕获“variables”,而不是“值”,因此在您的代码variables“我”被内部函数捕获,当该函数执行它使用捕获variables“i”显然是循环结束时循环中的最后一个值。 当你使用像JavaScript这样的捕获variables的语言来使用闭包时,你需要小心。

在cwolves解决scheme中,函数中的“i”变成了一个新的variables,与for循环中的I不一样,因此工作正常。

使用recursion模式循环与node.js

请参考我的答案,肯定你可以用这个来解决你的问题,因为你有控制循环