jquery deferred对象 then(),when()方法 ,解决回调函数嵌套

曾经做过一个注册页,很多的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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值