1.异步回调函数需要额外参数时必须使用无名函数
data = eval('('+data+')');//as a object 额外参数
//code address and init map
codeAddress(data.centerAdd,function(result){//codeAdress异步方法
var myLatlng = result[0].geometry.location;
initMap(mapDiv_,myLatlng,data);//data为回调函数的额外参数
});
如果这样调用codeAddress(data.centerAdd,successHandler);则successHandler中难以访问额外参数。
2.当循环中需要调用异步函数,常规的调用方式不能实现,下面提供一种方法供参考,实际引用时需要简单修改一下。
var arr = [0,1,2,3,4,5,6,7,8,9];//异步方法中需要的参数
var funcs = [];//存储每个异步方法
//按照参数大小循环将异步方法及其所需参数存储起来
for(var i=0;i<arr.length;i++){
(function(index){//index为循环中传入的参数
funcs.push(function(){
alert(arr[index]);//这里是需要调用方法,可以为异步方法
});
})(i);
}
for(var j=0;j<arr.length;j++){
funcs[j]();//触发每个独立的方法开始执行
}
上面代码原型引自[u]http://topic.youkuaiyun.com/u/20110523/18/130c472f-d531-498e-9647-45a4108c2c18.html[/u] 9# 我做了简单修改添加了注释,欢迎提供更多解决循环异步的方法
data = eval('('+data+')');//as a object 额外参数
//code address and init map
codeAddress(data.centerAdd,function(result){//codeAdress异步方法
var myLatlng = result[0].geometry.location;
initMap(mapDiv_,myLatlng,data);//data为回调函数的额外参数
});
如果这样调用codeAddress(data.centerAdd,successHandler);则successHandler中难以访问额外参数。
2.当循环中需要调用异步函数,常规的调用方式不能实现,下面提供一种方法供参考,实际引用时需要简单修改一下。
var arr = [0,1,2,3,4,5,6,7,8,9];//异步方法中需要的参数
var funcs = [];//存储每个异步方法
//按照参数大小循环将异步方法及其所需参数存储起来
for(var i=0;i<arr.length;i++){
(function(index){//index为循环中传入的参数
funcs.push(function(){
alert(arr[index]);//这里是需要调用方法,可以为异步方法
});
})(i);
}
for(var j=0;j<arr.length;j++){
funcs[j]();//触发每个独立的方法开始执行
}
上面代码原型引自[u]http://topic.youkuaiyun.com/u/20110523/18/130c472f-d531-498e-9647-45a4108c2c18.html[/u] 9# 我做了简单修改添加了注释,欢迎提供更多解决循环异步的方法