jquery的Deferred

本文深入探讨了jQuery Deferred和Promise之间的联系与区别,详细解释了Deferred如何通过工厂函数实现,以及其内部方法如何实现与Promise的交互。重点阐述了两者在异步编程中的应用与特性对比。

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

Query Deferred主是是为了解决异步而生。也许我们对于Deferred可能不熟悉,但是我们必定对promise熟悉,这两着之间有紧密的联系又或者说deffered包含promise的所有方法,但是为什么还会有promise呢?我们接下来会介绍。  

我们来看源码: 

我们可以看到这是一个工厂函数,结果返回一个组装成的对像deferred,那么接下来我们看一下这个返回的deferred对像都有哪些方法。

// Add list-specific methods
jQuery.each( tuples, function( i, tuple ) {
   var list = tuple[ 2 ],
   stateString = tuple[ 3 ];

   // promise[ done | fail | progress ] = list.add
   promise[ tuple[1] ] = list.add;

   // Handle state
   if ( stateString ) {
      list.add(function() {
      // state = [ resolved | rejected ]
      state = stateString;

      // [ reject_list | resolve_list ].disable; progress_list.lock
   }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
}

   // deferred[ resolve | reject | notify ]
   deferred[ tuple[0] ] = function() {
        deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
       return this;
  };
  deferred[ tuple[0] + "With" ] = list.fireWith;
});

  这里遍历了tuples对像实现了:  

  - list对像等于二维数组tuples中的callbacks对像  

  - promise对像添加了三个方法done,fail,progress且都等于callbacks的add方法  

  - stateString等于状态“resolved”或“rejected”  

  - deferred对像添加了6个方法resolve,reject,notify,resolveWith,rejectWith,notifyWith且等于callbacks的    fireWith方法  

接下来有一句代码是'promise.promise( deferred )';这句代码是把promise对像所有的方法赋给deferred对像

我们看到promise是不是没有触发执行的方法啊,所以它在是改变不了状态的,所以我们一般是用promise做异步编程的工作的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值