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单线程,这些细节网上都有。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步