When using callbacks inside a loop in javascript, is there any way to save a variable that's updated in the loop for use in the callback?
本问题已经有最佳答案,请猛点这里访问。
假设我有以下几点:
1 2 3 4 5 | for(var i = 0; i < length; i++){ var variable = variables[i]; otherVariable.doSomething(variable, function(err){ //callback for when doSomething ends do something else with variable; } |
到调用回调时,
你们中那些比我更了解javascript的人是否知道还有其他方法可以做我想做的事情?
最好,谢谢,
萨米语
处理这种情况的一种常见方法(如果很难看的话)是使用另一个立即被调用的函数来创建一个范围来保存变量。
1 2 3 4 | for(var i = 0; i < length; i++) { var variable = variables[i]; otherVariable.doSomething(function(v) { return function(err) { /* something with v */ }; }(variable)); } |
注意,在立即调用的函数内部,正在创建并返回的回调引用了函数
1 2 3 4 5 6 7 | function callbackFor(v) { return function(err) { /* something with v */ }; } for(var i = 0; i < length; i++) { var variable = variables[i]; otherVariable.doSomething(callbackFor(variable)); } |
好吧,我好像已经想清楚了。我需要做的是在
1 2 3 4 5 6 7 8 | for(var i = 0; i < length; i++){ var variable = variables[i]; (function(var){ //start wrapper code otherVariable.doSomething(var, function(err){ //callback for when doSomething ends do something else with var; //please note that i'm dealing with var here, not variable } })(variable);//passing in variable to var here } |
希望这能帮助其他任何人在未来陷入这样的困境!
@阿帕克42,我还是很想在你的问题的评论中听到你对我问题的回答,因为这仍然让我困惑。
编辑:当然,因为这是javascript,所以您不想使用