jQuery Deferred和Promise的使用介绍:
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的使用介绍:的更多相关文章
- 使用 jQuery Deferred 和 Promise 创建响应式应用程序
这篇文章,我们一起探索一下 JavaScript 中的 Deferred 和 Promise 的概念,它们是 JavaScript 工具包(如Dojo和MochiKit)中非常重要的一个功能,最近也首 ...
- jQuery.Deferred对象
一.前言 jQuery1.5之前,如果需要多次Ajax操作,我们一般会使用下面的两种方式: 1).串行调用Ajax $.ajax({ success: function() { $.ajax({ su ...
- jquery.Deferred promise解决异步回调
我们先来看一下编写AJAX编码经常遇到的几个问题: 1.由于AJAX是异步的,所有依赖AJAX返回结果的代码必需写在AJAX回调函数中.这就不可避免地形成了嵌套,ajax等异步操作越多,嵌套层次就会越 ...
- javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方式
我们先来看一下编写AJAX编码常常遇到的几个问题: 1.因为AJAX是异步的,全部依赖AJAX返回结果的代码必需写在AJAX回调函数中.这就不可避免地形成了嵌套.ajax等异步操作越多,嵌套层次就会越 ...
- 通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise
Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同.不过它们的作用可以简单的用两句话来描述 Deffered 触发 resolve ...
- jQuery中的Deferred和promise
promise:http://www.alloyteam.com/2014/05/javascript-promise-mode/ 1 jQuery 中的 Deferred 和 Promises : ...
- 大白话讲解Promise(三)搞懂jquery中的Promise
前两篇我们讲了ES6中的Promise以及Promise/A+规范,在Promise的知识体系中,jquery当然是必不可少的一环,所以本篇就来讲讲jquery中的Promise,也就是我们所知道的D ...
- javascript --- jQuery --- Deferred对象
javascript --- jQuery --- Deferred对象 javascript的函数式编程是多么引人入胜,jQuery使代码尽可能的精简,intelligent! defer - 必应 ...
- jQuery Deferred对象详细源码分析(-)
本系列文章讲介绍这个Deferred东西到底拿来干什么,从1.5版本加进来,jQuery的很多代码都重写了.直接先上源码分析了,清楚了源码分析,下节将讲具体的应用 以及应用场景. 创建对象 var d ...
随机推荐
- Android代码资源的国际化
internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n. 一般用语言_地区的形式表示一种语言,如 zh ...
- eclipse proxy
-Dorg.eclipse.ecf.provider.filetransfer.excludeContributors=org.eclipse.ecf.provider.filetransfer.ht ...
- ural1671 Anansi's Cobweb
Anansi's Cobweb Time limit: 1.0 secondMemory limit: 64 MB Usatiy-Polosatiy XIII decided to destroy A ...
- POJ 3494 Largest Submatrix of All 1’s
POJ 2796 Feel Good HDU 1506 Largest Rectangle in a Histogram 和这两题一样的方法. #include<cstdio> #incl ...
- curl讲解第一篇---入门和基本使用
概念 它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP. curl同样支持HTTPS认证,HTTP POST方法, ...
- rapidjson 使用教程
在cocos2d-x引入了rapidjson,它处理速度比其他的json库快,反正不管了,我们这边只是学习下如何使用.rapidjson官方网址: https://code.google.com/p/ ...
- iOS 主动抛出异常
http://blog.csdn.net/jymn_chen/article/details/38096749 http://blog.sina.com.cn/s/blog_7270a06c0101b ...
- Leetcode 182. Duplicate Emails
Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...
- Java链表的一些操作:
[还有一些其他的算法提]http://blog.csdn.net/WalkingInTheWind/article/category/906980 [转]http://blog.csdn.net/lu ...
- 一种新的隐藏-显示模式诞生——css3的scale(0)到scale(1)
.dropdown-menu { background: rgba(255, 255, 255, 0.98) none repeat scroll 0 0; box-shadow: 0 1px 2 ...