您的位置:首页 > Web前端 > JQuery

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