前端开发接触有一段时间了,一直想搞明白一个关于ajax同步异步的问题,异步无法确保数据A成功返回,需要用到A的地方就无法进行相应处理;若使用同步请求,则失去异步请求快速不等待的优点,程序在值被返回后继续执行。
我的想法是,有些js框架可以监听对象属性,可以一些依赖返回数据的函数放在监听函数中,当监听的属性有值以后再执行。
不知道有没有其他的比较好的处理方式,有相同疑惑的可以一起讨论,希望大神们不吝相告啊
前端开发接触有一段时间了,一直想搞明白一个关于ajax同步异步的问题,异步无法确保数据A成功返回,需要用到A的地方就无法进行相应处理;若使用同步请求,则失去异步请求快速不等待的优点,程序在值被返回后继续执行。
我的想法是,有些js框架可以监听对象属性,可以一些依赖返回数据的函数放在监听函数中,当监听的属性有值以后再执行。
不知道有没有其他的比较好的处理方式,有相同疑惑的可以一起讨论,希望大神们不吝相告啊
不知道是不是你需要的。jquery 有一个deffered对象。
$.when($.ajax("/echo/html/"), $.ajax("/echo/xml/"))
.done(function(){ alert("哈哈,成功了!"); })
.fail(function(){ alert("出错啦!"); });
异步无法确保数据A成功返回,需要用到A的地方就无法进行相应处理
这个只有很少的情况会遇到。与这个缺点相比,同步会让页面失去响应的缺点明显更严重。现在已经不再鼓励使用同步了。
其实结合Promise,异步的处理也可以简化很多。
加载数据时可以给一个加载动画, 加载成功后刷新显示, 加载失败给出相应提示
load() {
// 开始加载动画
ajaxFetchData()
.then(data => {
// 渲染界面
})
.catch(err => {
// 错误提示
})
.finally(() => {
// 结束加载动画
});
}
不考虑async等语法的前提下。
然而异步操作一般都是和回调函数绑定使用的,所有依赖返回结果的方法都要在回调函数中进行,你当然可以把返回结果在回调中赋值给外层变量。
同时你说的监听对象属性等,本身也是个异步操作,只不过是将原本函数回调中的一些职责转移到了监听的回调里,因为你本来就可以在原本函数的回调中进行这些依赖返回值得函数的调用。