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
大约 2 年之前 回复
amsw11
amsw11 回复danielinbiti:谢谢, 可我后面的代码里还会调用一些其他网站的api也会有回调函数,那会有问题吗
大约 2 年之前 回复
showbo
showbo 回复amsw11: 使用返回值的代码必须在回调里面
大约 2 年之前 回复
danielinbiti
danielinbiti 回复amsw11: 把要执行的代码封装成函数,然后再回调函数中调用该函数。
大约 2 年之前 回复
amsw11
amsw11 谢谢,那有没有办法就是上面的回调函数都执行完后再执行之后的代码呢,不然得不到想要的值
大约 2 年之前 回复
CSDNXIAOD
CSDNXIAOD   2016.05.05 14:10

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
使用回调函数,来确定js函数执行顺序
回调函数(callback) function test1(){ /* a(function () {//////// console.log("pageData-a-after:" + pageData); b(); }); */ a(b);
关于js的callback回调函数以及嵌套回调函数的执行过程理解
回调函数的处理逻辑理解:所谓的回调函数处理逻辑,其实就是先将回调函数的代码 冻结(或者理解为闲置),接着将这个回调函数的代码放到回调函数管理器的队列里面。 待回调函数被触发调用的时候,对应的回调函数的代码才会从管理器队列取出来并自动执行(激活回调函数的代码),实现异步的编程效果。不过,对于一些必须要等回调函数执行完毕才可以确定的动作,实际上,就是会掉入一个层层回调的局面了。这点也是回调函数的复杂的
js 异步操作,回调函数控制执行顺序
需求: fun A() { asyn(parm1, parm2, onsuccess(){ }) ;} fun B() {asyn(paem1, parm2, onsuccess(){}) ;} 函数B要求执行在函数A之后 异步执行 如果直接使用 A(); B(); 是不能够满足执行条件的。 考虑将B作为回调函数传递给A,然后A再执行的onsuce
ajax回调函数执行顺序带来的同步异步问题
我们来看这样一段代码: $(function(){ var a =0; $.getJSON(    "student_toadd",     {stunum:10},     $.each(status,function(i){            ........................           a=10;       
js中的for循环与异步回调函数执行顺序问题
上一篇博文“利用HTML5新特性localstorage把用户数据暂时存储在客户端,用于之后上传”里提到了用for循环,但是今天发现for循环不起作用。最终post请求只执行了一次,代码如下 for(i=localStorage.length-1;i>=0;i--){//从后往前依次取每条localstorage local_key=localStorage.key(i); if(local
如何按照顺序执行异步ajax的回调函数
之前在业务上遇到了一个需求,需要有依赖顺序地执行不定数量的ajax请求到服务器。 我们知道一般来说JS的异步ajax的回调函数的执行顺序是无法保证的。 我在jQuery的基础上使用了队列和递归的方法初步实现了顺序执行异步ajax请求的回调函数。 如有错误,欢迎批评和指正 :) 关于jQuery的Deferred对象的说明和使用,可以参考文章: http://www.ruanyifeng.
详解回调函数——以JS为例解读异步、回调和EventLoop
很多人在问什么是回调?百度出来的答案基本都不正确,看了只会让人更加迷惑。下文试着用尽量简单的例子帮大家梳理清楚,因为回调并不是一句话下定义就能明白的概念,需要用一段文字像讲故事一样来说明,回调如同很多重要的计算机概念一样,它是有历史文化的,你需要知道它从哪里来,用来干什么,才能理解及在实际生产中应用。回调,是非常基本的概念,尤其在现今NodeJS诞生与蓬勃发展中变得更加被人们重视。很多朋友学Node
JavaScript同步、异步、回调执行顺序分析
之所以会写这篇文章,是因为在做笔试题的时候,会遇到一题很经典的题目,关于setTimeout的输出结果,下面我们先来看一道题目: for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000); } console.log(i);      我相信只要是做过前端笔试题
js与jsp的执行顺序
最近突然好奇,js与jsp的执行顺序: 先看一段程序: var value = ; //上一个jsp中穿过来的 alert(value); 这段程序是在js中插入jsp语句,可以正常的执行; 再看下面一段程序: function loading() { document.write("JavaScript输出"); }
Ajax的原理及执行顺序
Ajax 是一种无需重新加载网页就能更新部分页面数据的技术 Ajax的全称是AsynchronousJavaScript and XML,即异步JavaScript+XML。 Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取...