jquery源码中Deferred的定义的理解

本文详细解析了jQuery中的Deferred对象实现方式,包括$.Deferred的功能介绍及其实现步骤,同时深入探讨了$.when方法的工作原理及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



一、jquery源码中Deferred的定义

 

jQuery.extend({
    Deferred: function( func ) {
        var tuples = [
                // action, add listener, listener list, final state
                [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
                [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
                [ "notify", "progress", jQuery.Callbacks("memory") ]
            ],
        ...
 
        // All done!
        return deferred;
    },
    // Deferred helper
    when: function( subordinate /**//* , , subordinateN */ ) {
        var i = 0,
            resolveValues = core_slice.call( arguments ),
            length = resolveValues.length,
            ...
 
        return deferred.promise();
    }
});




二、Deferred定义的说明



1、$.Deferred的实现


(1)、创建三个$.Callbacks对象,分别表示成功,失败,处理中三种状态
(2)、创建了一个promise对象,具有state、always、then、primise方法
(3)、通过扩展primise对象生成最终的Deferred对象,返回该对象


 


2、$.when的实现


(1)、接受若干个对象,参数仅一个且非Deferred对象将立即执行回调函数
(2)、Deferred对象和非Deferred对象混杂时,对于非Deferred对象remaining减1
(3)、Deferred对象总数 = 内部构建的Deferred对象 + 所传参数中包含的Deferred对象
(4)、所传参数中所有Deferred对象每当resolve时remaining减1,直到为0时(所有都resolve)执行回调


 


 参考资料 : jquery源码中Deferred的定义的理解   http://www.studyofnet.com/news/1223.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值