ajax嵌套ajax

最近在做项目的时候,需要用到两个接口,B接口的请求数据需要用到A接口sucess成功之后返回的数据:就像这样:A>{B}。但是老是报错,得不到想要的东西。上网上查找了一下资料,得到的原因是因为Ajax是异步的,B请求的时候A的success之后的数据可能并没有得到,所以呢,就导致程序运行不下去。

为了发扬程序远的精神,开始百度谷歌,网上解决方法比较多的就是这个:async: false

我把程序改成同步,哎,等着你得到数据,我再走,这样就解决啦。但是我感觉这个方法贼蠢,先不说导致页面卡死的问题,没法加载下面的js代码。哎,就感觉很low,没逼格,哈哈!

那么我转念一想,都是异步改同步的思路,那么A>{settimeout(function(){B},0)},我把B利用定时器,放到任务队列中,那么只有当主队列,也就是A所在的队列执行完后,B接着执行,问题也是可以解决的,这样呢,最起码页面不会锁死,以为自己很帅,问题解决。这就是我自己想出来的第二个方法。

为什么说问题解决而不是完美解决呢?因为有很多大神会喷我乱用settimeout,我想起来了前两天写的es6中的promise···好像也可以解决

 

于是>>

A{

  var promise = new Promise(function(reslove,reject){

     if(sucess){

      reslove(data)   //data是sucesss之后得到的数据

    }else{

      reject(err)

    }

  })

  return promise

}

 

调用呢,就这样:A.then(function(data){B(data)}).catch(function(){})

这个方法,es6新知识,如果在用es3的小伙伴可以上网上找类似插件

 

总结:这个东西是我由第一个方法联想到的其他两个方法,promise,同步异步,js单线程,这些细节网上都有。

 

posted @ 2017-06-08 15:21  HelloPengHR!  阅读(1886)  评论(0编辑  收藏  举报