jq中Deferred对象的使用
var d=$.Deferred();
//deferred下面的方法有:
// ["resolve", "resolveWith", "reject", "rejectWith", "notify", "notifyWith",
// "state", "always", "then", "promise", "pipe", "done", "fail", "progress"]
console.info(Object.keys(d));
console.info(d.pipe== d.then);//true
console.info(d.state());//初始化pending状态 //------------resolve对应的是done------------
function fn1(){
var def= $.Deferred();
setTimeout(function(){
def.resolve('成功了!');
},1000);
return def.promise();
}
fn1().done(function(data){
console.info(data);//成功了!
});
//或者可以这样写
fn1().then(function(data){ //then的参数为( fnDone, fnFail, fnProgress)
console.info(data);//成功了!
}); //------------reject对应的是fail------------
function fn2(){
var def= $.Deferred();
setTimeout(function(){
def.reject('失败了!');
},1000);
return def.promise();
}
fn2().fail(function(data){
console.info(data);//失败了!
});
//或者可以这样写
fn2().then(function(data){ //then的参数为( fnDone, fnFail, fnProgress)
//不会走
},function(data){
console.info(data);
}); //------------notify对应的是progress------------
function fn3(){
var def= $.Deferred();
setTimeout(function(){
def.notify('传递给下一步回调的通知!');
},1000);
return def.promise();
}
fn3().progress(function(data){
console.info(data);//传递给下一步回调的通知!
});
//或者可以这样写
fn3().then(function(data){ //then的参数为( fnDone, fnFail, fnProgress)
//不会走
},function(data){
//不会走
},function(data){
console.info(data);//传递给下一步回调的通知!
}); //------------always 不管成功与否都会执行回调------------
//deferred.done( arguments ).fail( arguments );
function fn4(){
var def= $.Deferred();
setTimeout(function(){
Math.random()>0.5?def.resolve('成功!'): def.reject('失败!')
},1000);
return def.promise();
}
fn4().always(function(data){
console.info(data);//成功!or失败!
}); //------------连续的回调依次执行------------
/*第一异步程序*/
function delayFn1(arg1){
var def= $.Deferred();
setTimeout(function(){
var data=arg1+1;
console.info("第一步--->",data);
def.resolve(data);
},1000);
return def.promise();
}
/*第二个异步程序*/
function delayFn2(arg2){
var def= $.Deferred();
setTimeout(function(){
var data=arg2+1;
def.resolve(data);
},1000);
return def.promise();
}
/*第三个异步程序*/
function delayFn3(arg3){
var def= $.Deferred();
setTimeout(function(){
var data=arg3+1;
def.resolve(data);
},1000);
return def.promise();
} delayFn1(1).then(function(data){
console.info("第二步--->",data);
return delayFn2(data)
}).then(function(data){
console.info("第三步--->",data);
return delayFn3(data)
}).then(function(data){
console.info("第四步--->",data);
alert(data);
})
jq中Deferred对象的使用的更多相关文章
- jQuery中deferred对象的使用(二)
接上一回的内容,漏了一个always()方法,参数也是回调函数,与done和fail不同的是,无论任何情况都执行always方法中的回调. deferred对象的使用(二) deferred对象不光可 ...
- jQuery中deferred对象的使用(一)
在jquery1.5之后的版本中,加入了一个deferred对象,也就是延迟对象,用来处理未来某一时间点发生的回调函数.同时,还改写了ajax方法,现在的ajax方法返回的是一个deferred对象. ...
- jQuery中异步操作对象Deferred
以下介绍一下jQuery中Deferred对象的使用: 1. 通过$.Deferred生成一个deferredObj对象; 2. deferredObj.done()指定操作成功时的回调函数; 3. ...
- javascript 学习笔记之JQuery中的Deferred对象
Deffered是Jquery中的一个非常重要的对象,从1.5版本之后,Jquery中的ajax操作都基于Deffered进行了重构,这个对象的处理模式就像其他Javascript框中的Promise ...
- JQ中的延迟对象deferred中的promise等的使用
一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们 ...
- jQuery中的deferred对象和extend方法
1⃣️deferred对象 deferred对象是jQuery的回调函数解决方案,它是从jQuery1.5.0版本开始引入的功能 deferred对象的方法 (1) $.Deferred() 生成一个 ...
- jQuery中deferred的对象使用
什么是deferred对象 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是 ...
- jquery中的 deferred之 deferred对象 (一)
案例: var def=$.Deferred(); console.log(def);//答案见 图1 图1: deferred就是一个有这些方法的对象. 看源码分析: Deferred: funct ...
- jq中的isArray方法分析,如何判断对象是否是数组
<!DOCTYPE html> <html> <head> <title>jq中的isArray方法分析</title> <meta ...
随机推荐
- Window配置环境变量
拿Java为例,讲一下怎么配置环境变量使得javac可以在全局被调用: 1.添加环境变量 例如我们的Java下载在了:D:\Java\v1.8 我们就到环境变量那添加一个例如叫“Java_path”的 ...
- MySQL日期时间格式化参数
MySQL中常常会用到对日期的格式化,比如按某时间格式计算间隔,按某时间格式统计信息等等,所以整理了一下日期格式化的参数,可以根据自己的需求进行组合使用.使用例子如下: (1)SELECT DATE_ ...
- logback配置按天产生日志文件
1 依赖Jar包 pom配置 也可以根据自己的版本来 <dependency> <groupId>org.slf4j</groupId> <artifactI ...
- jira7.3.6添加导出excel的按钮
在 jira的application-data 文件夹下 jira-config.properties 文件(如果没有就创建一个) 中添加以下内容:jira.export.excel.enabled= ...
- A - 最大子矩阵 HYSBZ - 1084 (DP)
题目链接:https://cn.vjudge.net/contest/281963#problem/A 题目大意:中文题目 具体思路:观察到m<=2,所以我们可以对两种情况进行单独讨论,当m== ...
- Remaiten-一个以路由器和IoT设备为目标的Linux bot
Remaiten-一个以路由器和IoT设备为目标的Linux bot ESET的研究人员正在积极地检测以嵌入式系统为攻击目标的木马,受影响的有路由器,网关和无线访问点.近期,我们已经发现了一个相关的b ...
- ubuntu 14.04界面美化
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAIAAABAXKuVAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4Xu
- 【Python】JBOSS-JMX-EJB-InvokerServlet批量检测工具
一.说明 在JBoss服务器上部署web应用程序,有很多不同的方式,诸如:JMX Console.Remote Method Invocation(RMI).JMXInvokerServlet.Htt ...
- Tomcat中catalina run后台运行脚本
编写启动脚本start.sh,将其放在/srv/aubapp/bin/下 #!/bin/sh #设置web应用程序目录 export CATALINA_BASE="/srv/aubapp&q ...
- UML和模式应用3:迭代和进化式分析和设计案例研究
1.前言 如何进行迭代和进化式分析和设计?将采用案例研究的方式贯穿始终.案例研究所包含的内容: UI元素 核心应用逻辑层 数据库访问 与外部软硬构件的协作 本章关于OOA/D主要介绍核心应用逻辑层 2 ...