jQuery中deferred对象的使用(二)
接上一回的内容,漏了一个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对象的使用(二)相关推荐
- jQuery中deferred对象详解
最近看看构建工具gulp,当看到promise时突然有点陌生,于是乎意外找到了大牛阮一峰的一篇文章,写的非常的通俗易懂,对延迟对象进行了很好的讲解,虽然写的比较早但是道理都一样. 以下为主要内容: 一 ...
- jQuery使用Deferred对象执行异步操作
在JQuery 1.5之前,Ajax仅支持一个回调函数,但在JQuery的1.5版本中,引入了 Deferred对象,它和ES6的Promise对象长的有点像,jQuery的Deferred对象也有r ...
- 谈谈JQuery的Deferred对象
最近一个变态的项目,一个页面只含编辑器且有下载功能,大概含20个左右接口,要求数据完整显示(很多echarts图),弄个等待圈圈等它loading,启用jQuery的Deferred延迟对象,再多的接 ...
- JavaScript中deferred对象浅析
JavaScript中deferred对象浅析 一.deferred对象 1.1deferred对象 1.1.1基本概念 deferred对象是JQuery的回调函数解决方案,解决了如何处理耗时操作的 ...
- jQuery的deferred对象详解
阮一峰大神的关于jQuery的deferred对象详解 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_ ...
- jQuery的deferred对象深析
从jQuery 1.5.0版本开始引入的一个新功能----deferred对象. 这个功能很重要,未来将成为jQuery的核心方法,它彻底改变了如何在jQuery中使用ajax.为了实现它,jQuer ...
- JQuery:deferred对象的方法
为什么80%的码农都做不了架构师?>>> (1) $.Deferred() 生成一个deferred对象. (2) deferred.done() 指定操作成功时的回调函数 ( ...
- jquery的deferred对象
1.$.Deferred 生成一个deferred对象. //var dtd = $.Deferred; 2.dtd.done()指定操作成功时的回调函数. 3.dtd.fail()指定操作成功时的 ...
- jQuery中json对象与json字符串互换
json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串: JSON.st ringify(jsonObj); IE中可能对unicode使用& ...
最新文章
- 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )
- VBS脚本常用经典代码收集
- 剑指offer:合并两个有序的链表
- C++中默认构造函数使用时的要点
- 声纹识别中的召回和精度概念
- java工程师要懂哪些东西_Java工程师都需要懂哪些知识?学实用知识得高薪
- 给WP7初学者:《WP7 Dev Quick Start系列视频》
- LoggingFilter Session 以及Async
- 系统设计拓展:如何设计一个自动阅卷系统(英语/数学)
- Enco free2 固件降级详解
- 暴风播酷云J3455局域网smb传输不稳定的另一种解决方案
- ABAQUS软件实训(四):Mesh模块之六面体网格划分技巧
- 新浪微博开放平台站内应用开发流程直播(一)
- Vue基础-09-表单输入绑定
- HFS+和HFSX的区别
- HDU 1265 浮点数
- 无人驾驶汽车背后的伦理困境
- Dual-awareness Attention for Few-Shot Object Detection
- Google Doc 更新一个文档 替换多个变量
- Python爬虫实战之 爬取全国理工类大学数量+数据可视化