2 amsw11 amsw11 于 2016.04.30 23:21 提问

js中回调函数的执行顺序

代码是调用了地图api函数,里面有个回调函数,想在回调函数里把值赋给全局变量,但是回调函数之后的代码里全局变量的值没变,具体见代码:

 <script type="text/javascript">

//基本地图加载
var map = new AMap.Map("container", {
    resizeEnable: true,
  //地图中心点
    zoom: 13 //地图显示的缩放级别
});



   var g=18;

   AMap.service(["AMap.RoadInfoSearch"], function() { //加载地理编码
     var road=new AMap.RoadInfoSearch({
  city:"北京",
  panel:"result"
  });
  alert("2:");
  road.roadInfoSearchByRoadName("广贤路",function (status,result){
  if(status=="error ")alert("error");
  else if (status=="no_data")alert("noting");
  else {
      var a = result.info;
      var b = result.roadInfo;
      g=59;

  }
});
    });

  alert(g);
...后面还有许多代码,g弹出的是18,但如果alert(g);前加一个alert("..");得到的g
就是59,这究竟是为何,求问

2个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.04.30 23:25
 如果road.roadInfoSearchByRoadName是异步执行的话,是会接着往下执行alert(g);  至于值会不会是59,看road.roadInfoSearchByRoadName方法执行的速度已经回调执行完的速度(正常来说肯定是alert(g)先执行)
 你在alert(g)加上alert("..")相当于等待road.roadInfoSearchByRoadName异步执行完在执行alert(g)
danielinbiti
danielinbiti 回复amsw11: 可以看看新写的例子 http://blog.csdn.net/danielinbiti/article/details/51290490
一年多之前 回复
amsw11
amsw11 回复danielinbiti:谢谢, 可我后面的代码里还会调用一些其他网站的api也会有回调函数,那会有问题吗
一年多之前 回复
showbo
showbo 回复amsw11: 使用返回值的代码必须在回调里面
一年多之前 回复
danielinbiti
danielinbiti 回复amsw11: 把要执行的代码封装成函数,然后再回调函数中调用该函数。
一年多之前 回复
amsw11
amsw11 谢谢,那有没有办法就是上面的回调函数都执行完后再执行之后的代码呢,不然得不到想要的值
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.05.05 14:10

动态加载js,并执行回调函数
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!