jQuery的deffered

1、是否用过jQuery的deffered
2、使用jQuery Defered
3、初步引入promise概念

 var ajax=$.ajax({
     url:'./data.json',
     success:function(){
         console.log('success 1')
         console.log('success 2')
         console.log('success 3')
     },
     error:function(){
         console.log('error')
     }
 })
var ajax= $.ajax('./data.json')
ajax.done(function(){
    console.log('success 1')
}).fail(function(){
    console.log('fail 1')
}).done(function(){
    console.log('success 2')
}).fail(function(){
    console.log('fail 2')
}).done(function(){
    console.log('success 3')
}).fail(function(){
    console.log('fail 3')
})//对扩展开放,对修改封闭

链式操作
返回的是一个deferred对象.then(成功后,失败后),promise原来是jquery提出来的
jquery无法改变js异步和单线程的本质

var ajax= $.ajax('./data.json')
ajax.then(function(){
    console.log('success 100')
},function(){
    console.log('fail 100')
}).then(function(){
    console.log('success 200')
},function(){
    console.log('fail 200')
}).then(function(){
    console.log('success 300')
},function(){
    console.log('fail 300')
})

只能从写法中杜绝callback这种形式
解耦了代码,也就是分到很多个函数中,并且顺序不会乱
js设计原则
js设计模式
开放封闭原则,只需要再加一个.加一个函数就行。
1、多人开发时,只需关注自己的即可,不互相干扰
2、原有的代码,所有的工程师都要测试一遍,回归测试的时候,知识扩展了一个新的函数,只需要修改新的函数即可
3、有的代码没改,只需测试扩展的方法即可

对修改开放了,对扩展封闭了
不需要修改任何内容,只需要扩展上就可以了

普通的异步处理

var wait =function(){
    var task =function(){
        console.log('执行完成')
    }
    setTimeout(task,2000)
}
wait()

jquery的异步处理

function waitHandle(){
    var dtd= $.Deferred()
    var wait =function(dtd){
        var task=function(){
            console.log('执行完成')
            dtd.resolve()
            //dtd.reject()
        }
        setTimeout(task,2000)
        return dtd
    }
    return wait(dtd)
}
var w=waitHandle()
w.then (function(){
    console.log('ok 1')
},function(){
    console.log('err 1')
})

dtd的API可分为俩类,
第一类:resolve reject//执行成功,执行失败主动触发
第二类:.then .done .fail,被动监听

function waitHandle(){
    var dtd= $.Deferred()
    var wait =function(dtd){
        var task=function(){
            console.log('执行完成')
            dtd.resolve()
        }
        setTimeout(task,1000)
        return dtd.promise()
    }
    return wait(dtd)
}
var w=waitHandle()
$.when(w).then(function(){
    console.log('ok 1')
}).then (function(){
    console.log('ok 2')
})//用jquery自己封装的promise

1、可以jQuery1.5对ajax的改变举例
2、说明简单的封装、使用deferred
开放封闭原则
3、说明promise和deferred的区别
deferred对象有resolve、reject这种主动创造函数,也有done,then,fail这种被动监听,很容易被篡改,promise可以被动监听,没有权利主动修改

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值