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. HDU 1828 POJ 1177 Picture

    矩形周长并 POJ上C++,G++都能过,HDU上C++过了,G++WA ,不知道为什么 #include<cstdio> #include<cstring> #include ...

  2. 汇总博客常见的api接口地址(windows live write)

    汇总博客常见的api接口地址(windows live write) 1. cnblogs 日志地址,直接输入 http://www.cnblogs.com/xxxxx/ api接口 http://w ...

  3. JQuery中的相反的地方

    1.on和delegate的参数顺序相反 2.each和map参数也是相反的

  4. CSS-学习笔记六

    1. 自适应,响应式布局 2. pure 3. Animate

  5. LNMP(Linux+Nginx+Mysql+PHP---源码)环境搭建

    LNMP(Linux+Nginx+Mysql+PHP(Perl)) Linux:[root@dep5 mysql]# cat /etc/issueRed Hat Enterprise Linux Se ...

  6. linux动态链接库---一篇讲尽

    一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: tmux: error while loading shared libraries: libevent-1.4.s ...

  7. 关于iOS后台模式

    https://onevcat.com/2013/08/ios7-background-multitask/ http://zhidao.baidu.com/link?url=NUOMrLGB6Odr ...

  8. POJ 3991 Seinfeld

    首先进行一次括号匹配,把正确匹配的全部删去. 删去之后剩下的状态肯定是 L个连续右括号+R个连续左括号. 如果L是偶数,答案是L/2+R/2: 否则答案是 (L-1)/2+(R-1)/2+2: #in ...

  9. IOS9新特性之Contacts联系人

    在以前iOS开发中,涉及联系人相关的编程,代码都非常繁琐,并且框架的设计也不是Objective-C风格的,这使开发者用起来非常的难受.在iOS9中,apple终于解决了这个问题,全新的Contact ...

  10. Myeclipse SVN 修改用户名和密码

    转自:http://blog.csdn.net/chow__zh/article/details/7731497 解决方案: 在Eclipse使用SVN的过程中大多数人往往习惯把访问SVN的用户名密码 ...