`
心语2012
  • 浏览: 45808 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

jquery的Deferred

 
阅读更多

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做异步编程的工作的。

分享到:
评论

相关推荐

    谈谈jQuery之Deferred源码剖析

    ### jQuery之Deferred源码剖析知识点 #### 一、Deferred和Promise简介 jQuery的Deferred对象是jQuery在ES6的Promise概念出现之前的一种实现,它允许开发者将异步操作的结果通过链式调用的方式处理,避免了传统的...

    javascript异步处理与Jquery deferred对象用法总结

    本文实例讲述了javascript异步处理与Jquery deferred对象用法。分享给大家供大家参考,具体如下: 这是项目组老大整理的一些关于jquery 异步处理请求,以及使用 jquery deferred 对象的一些常见方法。虽然是项目上...

    jquery Deferred 快速解决异步回调的问题

    jQuery Deferred 是一个强大的工具,它解决了JavaScript中异步编程的一大挑战——回调地狱。在JavaScript的异步编程中,我们通常需要处理多个回调函数,当这些回调嵌套过深时,代码可读性和维护性会显著降低。jQuery...

    Deferred:Deferred JS 库 - JQuery Deferred 的替代品

    Deferred.JS 是JQuery Deferred objects的替代品。 (行为与 JQuery Deferred 相同)。 阅读以了解为什么您应该从 JQuery Deferred 迁移到 Deferred.JS。 要从 JQuery Deferred 迁移到 Deferred.JS,请参阅 。 ...

    jQuery通过deferred对象管理ajax异步

    自jQuery 1.5版本起,引入了一种强大的异步编程模式——deferred对象。这一机制允许开发者以更为优雅和灵活的方式处理异步操作,特别是针对复杂的AJAX请求。 首先,要理解什么是异步操作。在编程中,异步操作指的是...

    jQuery的deferred对象详解

    jQuery的deferred对象是为了解决在JavaScript编程中经常遇到的异步操作而设计的一个功能强大的解决方案。在开发网站的过程中,我们经常需要处理一些耗时很长的操作,这些操作可能是异步的,如ajax读取服务器数据,也...

    reactive-promise:使 jQuery Deferred 承诺具有React性

    React式承诺使 jQuery.Deferred 承诺具有React性。关于Reactive-Promise 允许您使用承诺作为React数据源。 常见用例包括: 允许 Iron Router 路由等待一个或多个异步任务基于异步任务完成在模板中执行条件渲染使用...

    深入解析jQuery中Deferred的deferred.promise()方法

    在jQuery的世界里,异步编程的核心工具之一就是 Deferred 对象,它提供了一种优雅的方式来管理异步操作。本文将深入解析jQuery中 Deferred 的 `deferred.promise()` 方法,以及与 `.promise()` 的区别。 `deferred....

    jQuery中deferred对象使用方法详解

    在jquery1.5之后的版本中,加入了一个deferred对象,也就是延迟对象,用来处理未来某一时间点发生的回调函数。同时,还改写了ajax方法,现在的ajax方法返回的是一个deferred对象。 那就来看看deferred对象的用法。 1...

    jQuery Deferred和Promise创建响应式应用程序详细介绍

    `Deferred`对象由jQuery引入,而`Promise`则是ES6标准的一部分,两者密切相关,但有一些区别。 首先,`Deferred`是一个容器,用于封装一个异步操作的状态和结果。当异步操作(如Ajax请求)开始时,`Deferred`对象会...

    jQuery.deferred对象使用详解

    jQuery deferred对象是jQuery中一个重要的概念,它在jQuery 1.5版本中引入,用于更有效地处理异步操作。本文将详细介绍jQuery deferred对象的使用方法,并解释其优势。 一、什么是deferred对象? 在jQuery 1.5版本...

    jQuery的deferred对象使用详解

    jQuery中的deferred对象是自jQuery 1.5.0版本引入的一种新特性,旨在解决JavaScript中异步操作的回调函数管理问题。deferred对象可以看作是一种特殊的对象,它允许你延迟到某个未来时刻执行某项操作。它是jQuery的回...

    Wrox Press Professional jQuery (2012)

    使用jQuery Deferred进行高级异步编程(Advanced Asynchronous Programming with jQuery Deferred) - **Promise模式**:介绍Promise模式的基本概念及其在jQuery中的应用。 - **错误处理**:讲解如何优雅地处理异步...

    jQuery中借助deferred来请求及判断AJAX加载的实例讲解

    在jQuery中,`deferred`对象是用来处理异步操作的工具,特别适合于解决复杂的回调地狱问题。在AJAX请求中,当需要确保一系列请求按照特定顺序执行时,`deferred`就能派上用场。AJAX默认使用异步加载(`async: true`...

    jQuery中的deferred对象和extend方法详解

    jQuery中的`deferred对象`和`extend方法`是JavaScript异步编程的重要工具,尤其在处理AJAX请求和其他异步操作时非常有用。`deferred对象`是jQuery 1.5.0版本引入的,它提供了一种更优雅的方式来管理回调函数,解决了...

Global site tag (gtag.js) - Google Analytics