Deferred

  • 定义
  • 使用场景
  • 例子

定义

Deferred跟ES6中的Promise的套路是差不多的,不过Deferred是JQuery中的函数,我们先来看一下Deferred的一些介绍吧。

$.Deferred() 是一个构造函数,用来返回一个链式实用对象方法来注册多个回调,并且调用回调队列,传递任何同步或异步功能成功或失败的状态。

提示:

  1. $.Deferred() 构造函数创建一个新的 Deferred(延迟)对象, jQuery.Deferred 可传递一个可选的函数,该函数在构造方法返回之前被调用并传递一个新的 Deferred 对象作为函数的第一个参数。例如被调用的函数可以使用 deferred.then()来附加回调函数。
  2. 一个 Deferred 对象开始于挂起状态。任何使用 deferred.then(), deferred.always(), deferred.done(), 或者 deferred.fail() 添加到这个对象的回调函数都是排队等待执行的。调用 deferred.resolve() 或 deferred.resolveWith() 转换延迟到解决状态后立即执行设置的 doneCallbacks 。调用 deferred.reject() 或 deferred.rejectWith() 转换延迟到拒绝状态后立即执行设置的 failCallbacks 。一旦对象已经进入了解决或拒绝状态,它保持该状态。回调仍然可以添加到已解决或已拒绝的 Deferred 对象——它们会立即执行。

使用场景

1、处理异步请求后再执行业务代码;
2、解决回调地狱;

例子

今天遇到这样一个功能,就是上传图片时,要保存图片的高和宽,但是获取图片的高宽,创建一个Image对象,要等Image对象load完成后才会返回图片的信息,因此这是个异步操作。上传一张图片是好办的,但是如果有多张图片呢?所以我就想到了Deferred
举个栗子:

uploadImgs: function(){var deferred = $.Deferred();var _URL = window.URL || window.webkitURL;var formData = new FormData(); for (var i = 0, len = files.length; i < len; i++) {var imgObj = files[i];var me = this;formData.append('file', imgObj);var param = {}this.getImgWh(imgObj, _URL, i).done(function(data){param.imgWidth = data.width;param.imgHeight = data.height;param.imgSize = data.size;if(data.i == len - 1){formData.append('imgVos', JSON.stringify(imgVos));//上传图片的请求//......//result = addImgs();deferred.resolve(result);}})}return deferred.promise();
}//获取图片的高和宽
getImgWh: function(){var deferred = $.Deferred();var img = new Image();img.onload = function () {deferred.resolve({fileName: fileName,width: this.width,height: this.height,size: imgObj.size,i: i});}img.src = _URL.createObjectURL(imgObj);return deferred.promise();
}

浅谈Deferred(延迟对象)相关推荐

  1. 浅谈python的对象的三大特性之封装

    我们家里都有电视机,从开机,浏览节目,换台到关机,我们不需要知道电视机里面的具体细节,只需要在用的时候按下遥控器就可以完成操作,这就是功能的封装. 在用支付宝进行付款的时候,只需要在用的时候把二唯码给 ...

  2. C++之浅谈类与对象

    类与对象是C++语言的一个特点,类是对象的抽象,对象是类的实例. 类是抽象的需要占用内存,而对象时实例化的占用内存. 下面举个例子: class Time //定义类 {int hour; //定义数 ...

  3. 浅谈ThingJs之对象查询方法

    在开发中,引入了场景,添加了对象,那我们如何尽快的找到对象呢? 方法如下: 1.在父类/子类树上,通过parent.children属性找到要控制的对象 2.在分类对象属性树上,通过类身上分类属性找到 ...

  4. 浅谈阿里云对象存储OSS

    OSS(即Object Storage Service)是一种提供海量.安全.低成本.高可靠的云存储服务,适合存放任意类型的文件.容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本,官方一点 ...

  5. 浅谈将子类对象赋值给父类对象

    最近对将子类对象赋值给父类对象有点心得,想和大家分享一下,但本人水平有限,请各位指正和批评.言归正传,下面是几个小例子,请大家看一看. 测试一 父类: public class Supclass {p ...

  6. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  7. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

  8. java list数组排序_浅谈对象数组或list排序及Collections排序原理

    常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...

  9. java方法区对象类型_浅谈Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

最新文章

  1. java jdk 环境变量配置(window 10 系统)
  2. 从事仪表专业学c语言有用吗,仪器仪表工程就业方向
  3. ./src/cuda.c:36: check_error: Assertion `0‘ failed
  4. 解析xml数据存入bean映射到数据库的 需求解决过程
  5. Elasticsearch –使用模式替换过滤器和自定义分析器忽略查询中的特殊字符
  6. Android App内存优化之图片优化
  7. anyRTC 解决方案——双师在线课堂、1VN、大型公开课
  8. 计算机工作操作中一些问题,计算机二级考试中操作题常见问题之[电子表格]
  9. 侣信即时通讯系统全新发布
  10. Windows Server 2008/2008 R2 各版本内存支持概要
  11. java命令行参数是什么_Java实验课:命令行参数是什么?
  12. 淘宝/天猫api 添加收货地址 API接口
  13. 数字图像取证:初学者手册
  14. Android学习之ExpandableListView
  15. TUIO学习笔记1-TUIO 1.1 Protocol Specification协议规范/标准
  16. 这一切,只因心中有梦
  17. MVC医院信息管理系统源码 BS架构
  18. php前端语言三套语文卷子,2018高考语文语言文字运用模拟题及答案(3.4)
  19. 如何让BERT拥有视觉感知能力?两种方式将视频信息注入BERT
  20. 抖店与淘宝有什么不同?

热门文章

  1. Prompt learning系列之入门篇
  2. 2062【例1.3】电影票-一 c++语言入门-c++语言
  3. 清华大学出版社计算机绘谱,清华大学出版社-图书详情-《土木与建筑类CAD技能一级(二维计算机绘图)AutoCAD培训教程》...
  4. AutoCAD 2021绿色中文精简版
  5. 火车票服务端集成总结
  6. 20210918 【双击excel文件,看不到文件内容,只有灰蒙蒙的一片】的解决办法
  7. 自己做量化交易软件(20)通达信公式选股程序的实现
  8. 计算机专业有哪些【含金量超高竞赛】?
  9. 基于Java毕业设计智创员工管理系统源码+系统+mysql+lw文档+部署软件
  10. loopback(本地回环)接口的作用