接上一回的内容,漏了一个always()方法,参数也是回调函数,与done和fail不同的是,无论任何情况都执行always方法中的回调。

deferred对象的使用(二)

deferred对象不光可以用在jquery的ajax方法中,他提供了一系列的接口,使它的通用型大大提高。

比如有这样一个耗时比较久的方法

function a(){function b(){alert('start');}  setTimeout(b, 3000);
}

如果要在这个方法之后执行某个回调,就不能用$.when()了,因为当$.when()的参数不为deferred对象是会直接调用done或者always中的回调函数。

这个时候就要使用deferred对象的其他方法了,还是上面的方法,做一些改写

function a(){var def = $.Deferred(); // 创建deferred对象  function b(){alert('start');def.resolve(); // 改变deferred对象的状态
  }  setTimeout(b, 3000);  return def;
}$.when(a()).done(function(){alert("It's callback");
});

分析一下:

1. $.Deferred()方法会创建一个deferred对象

2. def.resolve()会改变deferred对象的状态,deferred对象有三种状态,未完成,成功,失败。

它有resolve()和reject()两个方法,resolve方法可以把对象状态改为成功,reject方法可以把状态改为失败。

又有以上的写法会出现问题,返回的deferred对象可以被外部改变状态,所以还提供了一个promise()方法,这个方法会在deferred对象的基础上返回一个新的deferred对象,不同的是,返回的对象只存在可被观察到状态,而不具备可改变其状态的方法,类似返回了一个只读的deferred对象。

所以同样的例子可以改写成这样

function a(){var def = $.Deferred(); // 创建deferred对象  function b(){alert('start');def.resolve(); // 改变deferred对象的状态
  }  setTimeout(b, 3000);  return def.promise();
}$.when(a().reject()).done(function(){ // reject()方法无效alert("It's callback");
});

转载于:https://www.cnblogs.com/fxxkhigh/p/5535566.html

jQuery中deferred对象的使用(二)相关推荐

  1. jQuery中deferred对象详解

    最近看看构建工具gulp,当看到promise时突然有点陌生,于是乎意外找到了大牛阮一峰的一篇文章,写的非常的通俗易懂,对延迟对象进行了很好的讲解,虽然写的比较早但是道理都一样. 以下为主要内容: 一 ...

  2. jQuery使用Deferred对象执行异步操作

    在JQuery 1.5之前,Ajax仅支持一个回调函数,但在JQuery的1.5版本中,引入了 Deferred对象,它和ES6的Promise对象长的有点像,jQuery的Deferred对象也有r ...

  3. 谈谈JQuery的Deferred对象

    最近一个变态的项目,一个页面只含编辑器且有下载功能,大概含20个左右接口,要求数据完整显示(很多echarts图),弄个等待圈圈等它loading,启用jQuery的Deferred延迟对象,再多的接 ...

  4. JavaScript中deferred对象浅析

    JavaScript中deferred对象浅析 一.deferred对象 1.1deferred对象 1.1.1基本概念 deferred对象是JQuery的回调函数解决方案,解决了如何处理耗时操作的 ...

  5. jQuery的deferred对象详解

    阮一峰大神的关于jQuery的deferred对象详解 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_ ...

  6. jQuery的deferred对象深析

    从jQuery 1.5.0版本开始引入的一个新功能----deferred对象. 这个功能很重要,未来将成为jQuery的核心方法,它彻底改变了如何在jQuery中使用ajax.为了实现它,jQuer ...

  7. JQuery:deferred对象的方法

    为什么80%的码农都做不了架构师?>>>    (1) $.Deferred() 生成一个deferred对象. (2) deferred.done() 指定操作成功时的回调函数 ( ...

  8. jquery的deferred对象

    1.$.Deferred 生成一个deferred对象.  //var dtd = $.Deferred; 2.dtd.done()指定操作成功时的回调函数. 3.dtd.fail()指定操作成功时的 ...

  9. jQuery中json对象与json字符串互换

    json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串: JSON.st ringify(jsonObj); IE中可能对unicode使用& ...

最新文章

  1. 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )
  2. VBS脚本常用经典代码收集
  3. 剑指offer:合并两个有序的链表
  4. C++中默认构造函数使用时的要点
  5. 声纹识别中的召回和精度概念
  6. java工程师要懂哪些东西_Java工程师都需要懂哪些知识?学实用知识得高薪
  7. 给WP7初学者:《WP7 Dev Quick Start系列视频》
  8. LoggingFilter Session 以及Async
  9. 系统设计拓展:如何设计一个自动阅卷系统(英语/数学)
  10. Enco free2 固件降级详解
  11. 暴风播酷云J3455局域网smb传输不稳定的另一种解决方案
  12. ABAQUS软件实训(四):Mesh模块之六面体网格划分技巧
  13. 新浪微博开放平台站内应用开发流程直播(一)
  14. Vue基础-09-表单输入绑定
  15. HFS+和HFSX的区别
  16. HDU 1265 浮点数
  17. 无人驾驶汽车背后的伦理困境
  18. Dual-awareness Attention for Few-Shot Object Detection
  19. Google Doc 更新一个文档 替换多个变量
  20. Python爬虫实战之 爬取全国理工类大学数量+数据可视化

热门文章

  1. Eclipse工作空间还原到最初状态
  2. 计算机网络基础(路由原理)
  3. Red Hat Linux 5.2 14T大文件系统 分区过程
  4. Activity的状态保存
  5. 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(一)
  6. 任正非未来出行三谈,在攀登无人驾驶珠峰路上沿途下蛋...
  7. PHP成为首个在内核中嵌入加密库的编程语言
  8. DHCP服务器功能浅析
  9. 设计模式-行为-Iterator(迭代器)模式
  10. display vs visibility