阅读jQuery--Deferred

其实在callbacks的基础上再来看deferred还是件挺容易的事情。不过deferred在设计上还是有值得可以学习的地方。下面就个人的理解解读一二:

整个deferred的最后是return deferred,deferred是由私有变量promise中的promise方法extend promise本身得到的一个对象。看上去有点绕了。。。其实promise(deferred的私有变量)就是deferred的核,他定义了deferred中

state():deferred状态

always():将一个方法同时添加到done和fail

then():将done,fail,progress(前三个参数按顺序)依次添加到一个新建的deferred中(执行的时候按照.then()的顺序执行resolve/reject/notify)。在源码中一旦调用了then,就会得到一个新的deferred,同时在旧的deferred中会使用done/fail/progress方法添加参数中传来的方法,旧的deferred一旦执行,则会执行刚才添加的方法,同时判断这个方法返回的对象是不是有promise属性(比如jquery的xhr),有的话则将返回的对象的resolve/reject/notify方法添加到新的deferred的done/fail/progress(这里可以避免在异步的时候先执行后面的方法);如果没有promise属性则resolve/reject/notify新的deferred。

promise():接受一个对象参数,并将此对象extend本deferred的promise对象返回给调用者(就是这里说的promise)。

done(),fail(),progress():添加执行方法。

pipe():等于then();

然后是promise对象没有方法:

resolve(),reject(),notify():执行通过done/fail/progress添加的方法。

deferred在new的时候也可以接受一个func当参数,此时这个func的上下文和第一个参数就是这个new 的deferred。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值