deferred对象是从jquery1.5.0引入的一个新对象,ES6也引入了Promise的正式规范。

抽象来说,deferreds 可以理解为表示需要长时间才能完成的耗时操作的一种方式,相比于阻塞式函数它们是异步的,而不是阻塞应用程序等待其完成然后返回结果。deferred对 象会立即返回,然后你可以把回调函数绑定到deferred对象上,它们会在异步处理完成后被调用。

下面几个例子来看deferred的使用

            //实例1
var defer = $.Deferred();
defer.done(function(a, b) {
alert("执行done方法:" + (a + b));
})
.fail(function(a, b) {
alert("执行fail输出:" + (a + b));
})
.then(function(a) {
alert("执行then输出" + a);
})
.always(function() {
alert("执行结束函数")
}); defer.resolve(, ); //调用Deferred的done方法并执行回调thenh和执行always方法
//defer.reject(1, 2); //调用Deferred的fail方法并执行回调then(callback,callback)第个参数回调方法和执行always方法
            //实例2
var dtd = $.Deferred(); // 生成Deferred对象
var wait = function() {
alert("执行wait函数");
dtd.resolve();
};
dtd.promise(wait);
wait.done(function() {
alert("执行成功了!");
})
.fail(function() {
alert("出错啦");
}); wait();

利用dtd.promise方法将wait附加到Deferred对象上

            //实例3
var promise = function() {
return $.Deferred(function(dfd) {
setTimeout(function() {
alert("执方法1");
dfd.resolve();
},
);
})
.promise();
} var promise2 = function() {
return $.Deferred(function (dfd) {
alert("执行方法2");
dfd.resolve();
})
.promise();
} var promise3 = function () {
return $.Deferred(function (dfd) {
alert("执行方法3");
dfd.resolve();
})
.promise();
} $.when(
promise(),
promise2(),
promise3()
)
.then(function() {
alert("promise执行完成");
})
.fail(function() {
alert("执行失败");
});

上述代码依次执行完promise,promise2,promise3函数才会回调then。

Deferred的方法:

jQuery.Deferred()

创建一个新的Deferred对象的构造函数,可以带一个可选的函数参数,它会在构造完成后被调用。

jQuery.when()

通过该方式来执行基于一个或多个表示异步任务的对象上的回调函数

jQuery.ajax()

执行异步Ajax请求,返回实现了promise接口的jqXHR对象

deferred.then(resolveCallback,rejectCallback)

添加处理程序被调用时,递延对象得到解决或者拒绝的回调。

deferred.done()

当延迟成功时调用一个函数或者数组函数.

deferred.fail()

当延迟失败时调用一个函数或者数组函数.。

deferred.resolve(ARG1,ARG2,...)

调用Deferred对象注册的‘done’回调函数并传递参数

deferred.resolveWith(context,args)

调用Deferred对象注册的‘done’回调函数并传递参数和设置回调上下文

deferred.isResolved

确定一个Deferred对象是否已经解决。

deferred.reject(arg1,arg2,...)

调用Deferred对象注册的‘fail’回调函数并传递参数

deferred.rejectWith(context,args)

调用Deferred对象注册的‘fail’回调函数并传递参数和设置回调上下文

deferred.promise()

返回promise对象,这是一个伪造的deferred对象:它基于deferred并且不能改变状态所以可以被安全的传递

jQuery Deferred和Promise的使用介绍:的更多相关文章

  1. 使用 jQuery Deferred 和 Promise 创建响应式应用程序

    这篇文章,我们一起探索一下 JavaScript 中的 Deferred 和 Promise 的概念,它们是 JavaScript 工具包(如Dojo和MochiKit)中非常重要的一个功能,最近也首 ...

  2. jQuery.Deferred对象

    一.前言 jQuery1.5之前,如果需要多次Ajax操作,我们一般会使用下面的两种方式: 1).串行调用Ajax $.ajax({ success: function() { $.ajax({ su ...

  3. jquery.Deferred promise解决异步回调

    我们先来看一下编写AJAX编码经常遇到的几个问题: 1.由于AJAX是异步的,所有依赖AJAX返回结果的代码必需写在AJAX回调函数中.这就不可避免地形成了嵌套,ajax等异步操作越多,嵌套层次就会越 ...

  4. javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方式

    我们先来看一下编写AJAX编码常常遇到的几个问题: 1.因为AJAX是异步的,全部依赖AJAX返回结果的代码必需写在AJAX回调函数中.这就不可避免地形成了嵌套.ajax等异步操作越多,嵌套层次就会越 ...

  5. 通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise

    Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同.不过它们的作用可以简单的用两句话来描述 Deffered 触发 resolve ...

  6. jQuery中的Deferred和promise

    promise:http://www.alloyteam.com/2014/05/javascript-promise-mode/ 1 jQuery 中的 Deferred 和 Promises : ...

  7. 大白话讲解Promise(三)搞懂jquery中的Promise

    前两篇我们讲了ES6中的Promise以及Promise/A+规范,在Promise的知识体系中,jquery当然是必不可少的一环,所以本篇就来讲讲jquery中的Promise,也就是我们所知道的D ...

  8. javascript --- jQuery --- Deferred对象

    javascript --- jQuery --- Deferred对象 javascript的函数式编程是多么引人入胜,jQuery使代码尽可能的精简,intelligent! defer - 必应 ...

  9. jQuery Deferred对象详细源码分析(-)

    本系列文章讲介绍这个Deferred东西到底拿来干什么,从1.5版本加进来,jQuery的很多代码都重写了.直接先上源码分析了,清楚了源码分析,下节将讲具体的应用 以及应用场景. 创建对象 var d ...

随机推荐

  1. STM8单片机启动流程彻底探究--基于IAR开发环境

    初学STM8会发现,STM8官方的固件库并没有提供一个.s文件的启动代码,那么她是如何启动然后跳转到main函数执行的呢 首先,我们根据ARM的只是可以推测,STM8也是通过复位向量来启动的,假设流程 ...

  2. 向datagridview 添加行

    datagridview 已经绑定数据源且控件的AllowUserToAddRows设置为false时. ((DataTable)dataGridView1.DataSource).Rows.Add( ...

  3. js删除最后一个字符串方法

    JS 删除字符串最后一个字符的几种方法 2010-12-02 08:18:35|  分类: 编程 |举报 |字号 订阅   字符串:string s = "1,2,3,4,5," ...

  4. 一个UWSGI的例子

    摘要:uwsgi执行顺序:启动master进程,执行python脚本的公共代码(import同一层).然后生成worker进程,uwsgi.post_fork_hook=init_functions, ...

  5. 公司搬家,拿了个费机器,没root密码,又忘了怎么搞了,

    grub中找到ro->rw single init=/bin/bash passwd root

  6. [iOS Animation]-CALayer 显示方式

    寄宿图 图片胜过千言万语,界面抵得上千图片 ——Ben Shneiderman 我们在第一章『图层树』中介绍了CALayer类并创建了一个简单的有蓝色背景的图层.背景颜色还好啦,但是如果它仅仅是展现了 ...

  7. iOS推送跳转AppDelegate跳转VC

    在开发项目中,会有这样变态的需求: 推送:根据服务端推送过来的数据规则,跳转到对应的控制器 feeds列表:不同类似的cell,可能跳转不同的控制器(嘘!产品经理是这样要求:我也不确定会跳转哪个界面哦 ...

  8. 顽强的的砂锅之——深究finally代码块与return语句的执行顺序!

    当问到finally代码块的执行顺序,就算刚刚学编程的小白都能毫不犹豫的说出答案:不管异常发生与否,finally语句块的代码一定会被执行!大体上这样讲是没有错,但是finally块中的代码一定会有效 ...

  9. laravel数据库迁移的migrate小解

    当通过命令行:php artisan migrate:make create_authors_table --table=authors --create时,在 migration.php 中若Sch ...

  10. 《数据结构与算法分析:C语言描述》读书笔记------List的C语言实现

    List的简单实现.在GCC下测试通过. list.h #ifndef _List_H /*List数据结构的简单实现*/ struct Node; typedef struct Node Node; ...