thi*_*ami 68 javascript callback
假设我有以下内容:
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;
}
Run Code Online (Sandbox Code Playgroud)
在调用回调时,variable将不可避免地成为所有回调的最后一个变量,而不是每个回调的不同变量,正如我所希望的那样.我意识到我可以传递variable给doSomething()然后作为回调的一部分传回,但是它doSomething()是外部库的一部分,我宁愿不要乱用它的源代码.
那些比我更了解JavaScript的人知道是否有其他方法可以做我想做的事情?
最好的,谢谢,
萨米
apa*_*r42 52
处理这种情况的一种常见的,如果丑陋的方法是使用另一个立即调用的函数来创建一个范围来保存变量.
for(var i = 0; i < length; i++) {
var variable = variables[i];
otherVariable.doSomething(function(v) { return function(err) { /* something with v */ }; }(variable));
}
Run Code Online (Sandbox Code Playgroud)
请注意,在立即调用的函数内部,正在创建并返回的回调将参数引用到函数v而不是外部variable.为了使这个读取更好,我建议将回调的构造函数作为命名函数提取.
function callbackFor(v) {
return function(err) { /* something with v */ };
}
for(var i = 0; i < length; i++) {
var variable = variables[i];
otherVariable.doSomething(callbackFor(variable));
}
Run Code Online (Sandbox Code Playgroud)
thi*_*ami 38
好吧,我似乎已经明白了这一点.我需要做的是放一个function(var)包装器otherVariable.doSomething(),所以更新的代码如下所示:
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
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助其他人在将来遇到类似这样的事情!
@ aparker42,我仍然希望在你的问题评论中听到你对我的问题的回答,因为那仍然让我感到困惑.
编辑:当然,因为这是javascript,你不会想var用作变量名.
| 归档时间: |
|
| 查看次数: |
41955 次 |
| 最近记录: |