jquery deferred对象 then(),when()方法 ,解决回调函数嵌套
2017-08-30 13:51
746 查看
曾经做过一个注册页,很多的AJAX接口,多个分支,层层嵌套,感觉代码特别难看,都说Promise/A+规范可以解决这个问题,而现在主流框架都实现了这个规范,于是就去研究了一下。发现可以使用deferred对象,然后的就是调试,调试,再调试,感觉可以用下面的思路来解决我的问题。另外需要说一下,我使用的jquery是1.9的,如果使用1.12以后的版本好像defferred对象改动挺大的吧
<script type="text/javascript"> $(document).ready(function() { var aa = $.Deferred(); var bb = $.Deferred(); var cc = $.Deferred(); /*先说一下then方法的使用*/ /*第一个deferred对象,并定义其成功或失败的回调函数*/ aa .then(function(param1){ /*成功的回调函数*/ var param2 = '1st success params'; /*在这里决定调用第二个defferred对象的哪一个回调函数,这里调用的是成功的,并传入参数*/ bb.resolve(param2); },function(param1){ /*失败的回调函数*/ var param2 = '1st fail params'; }); bb .then(function(param2){ console.log(param2); /*在这里决定调用第三个defferred对象的哪一个回调函数,这里调用的是失败的,并传入参数*/ var param3 = '2st success params'; cc.reject(param3); },function(param2){ console.log(param2); }); cc .then(function(param3){ console.log(param3); },function(param3){ console.log(param3); /*回调函数链进行到这里*/ }); setTimeout(function(){ /*回调函数链的开始入口,这里调用了第一个defferred对象的成功回调,并传入第一个参数*/ aa.resolve(param1); },1000); /*然后是when方法的使用*/ $.when(aa,bb).done(function(param1,param2){ /*when是当传入异步操作都成功的时候执行的函数,但是后面也可以接then方法,那就可以定义成功和失败两个回调函数*/ console.log('aa和bb都成功了'); console.log(param1); console.log(param2); }); }); </script>
相关文章推荐
- jquery 中的deffered和promise对象方法及$when done then的使用
- 使用JQuery Deferred对象的then() 解决多个AJAX操作顺序依赖的问题
- 使用JQuery Deferred对象的then() 解决多个AJAX操作顺序依赖的问题
- jQuery中deferred对象使用方法详解
- jQuery对象和DOM对象转换,解决jQuery对象不能使用js方法的问题
- jQuery回调、递延对象总结(中篇) —— 神奇的then方法
- jQuery回调、递延对象,then方法
- 将form表单里的数据封装成对象 json2.js的例子 jquery的serialize方法转换空格为+号的解决方法
- JQuery-AJAX 不支持对象此方法或属性解决办法
- jQuery UI Datepicker length为空或不是对象错误的解决方法
- jquery对象控制type=radio的input问题解决方法:
- Jquery.ajax不能解析json对象,报Invalid JSON错误的原因和解决方法(转)
- jQuery回调、递延对象总结(中篇) —— 神奇的then方法
- jquery技巧总结-jQuery对象,集合,方法扩展,事件处理,特效,解决冲突
- Jquery.ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
- Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:
- jQuery UI Datepicker length为空或不是对象错误的解决方法
- jquery 获取顶级父页面对象出错,解决方法
- jquery源码解析:jQuery延迟对象Deferred(工具方法)详解2
- JQuery-AJAX 不支持对象此方法或属性解决办法