如何在请求调用时将值传递给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
请参考我的答案,肯定你可以用这个来解决你的问题,因为你有控制循环