promise:http://www.alloyteam.com/2014/05/javascript-promise-mode/

1

jQuery 中的 Deferred 和 Promises :

http://www.css88.com/archives/4750

 function getData(){
var dtd = $.Deferred();
$.ajax({
url: "https://api.flightstats.com/flex/schedules/rest/v1/jsonp/flight/AA/100/departing/2013/10/4",
type: 'GET',
dataType: 'jsonp',
data:{
},
crossDomain: true,
success: function(res) {
if (res) {
console.log(res);
};
dtd.resolve();
}
})
return dtd;
}
function init(){
getData().done(function(){
console.log(1111);
})
}
init();
function getData(){
var promise = $.ajax({
url: "https://api.flightstats.com/flex/schedules/rest/v1/jsonp/flight/AA/100/departing/2013/10/4",
type: 'GET',
dataType: 'jsonp',
data:{
},
crossDomain: true
})
promise.done(function(){
console.log(111);
}).then(function(){
console.log(222)
}).then(function(){
console.log(3333);
}) }
 function result(){
$("#result").html("done")
};
function wait(){
var dtd = $.Deferred();//Deferred(延迟)对象
setTimeout(function(){
dtd.resolve();
},2000)
return dtd;
}
wait().done(result);

promise对象

大多数情况下,我们不想让用户从外部更改deferred对象的状态。这时,你可以在deferred对象的基础上,返回一个针对它的promise对象。我们可以把后者理解成,promise是deferred的只读版,或者更通俗地理解成promise是一个对将要完成的任务的承诺。

jQuery的ajax() 方法返回的就是一个promise对象。此外,Animation类操作也可以使用promise对象。

 var deferred = $.Deferred();
deferred.resolve("hello world!")
deferred.done(function(value){
alert(value);
}).fail(function(value){
alert("failed");
}).then(function(){
alert("then")
})
console.log(deferred.state());
$.when(
$.ajax( "/main.php" ),
$.ajax( "/modules.php" ),
$.ajax( "/lists.php" )
).then(function (resp1, resp2, resp3){
console.log(resp1);
console.log(resp2);
console.log(resp3);
});

deferred的几种用法

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>deferred使用实例</title>
<script src="jquery.js"></script> </head>
<body>
<button id="btn1">例一:基本用法</button>
<button id="btn2">例二:过滤器</button>
<button id="btn3">例三:promise方法</button>
<script>
function show(str){
$("body").append(str);
}
//基本用法
$("#btn1").click(function(){
var dtd = $.Deferred();
dtd.done(function(){
show("成功!");
});
setTimeout(function(){
//这是一个耗时任务
dtd.resolve();
}, 2000)
})
//过滤器
$("#btn2").click(function(){
var defer = $.Deferred();
var filtered = defer.then(function(value){
return value*2;
})
defer.resolve(5);
filtered.done(function(value){
show("value is " + value);
})
})
//实现promise方法
$("#btn3").click(function(){
var obj = {
hello: function(name){
show("您好" + name)
}
};
var defer = $.Deferred();
//return obj != null ? jQuery.extend( obj, promise ) : promise;
defer.promise(obj);
defer.resolve("ssss");
obj.done(function(value){
obj.hello(value);
}).hello("aaaa");
})
</script>
</body>
</html>

$.when()

jQuery的Deferred最好用的地方,就是模块化程度非常高,可以任意配合使用。

function task(name) {
var dtd = $.Deferred();
setTimeout(function() {
dtd.resolve(name)
}, 1000)
return dtd;
}
$.when(task('任务一'), task('任务二')).done(function() {
alert('成功')
})

把需要处理的异步操作,用Deferred对象给包装一下,然后通过when方法收集异步的操作,最后再返回出done的成功,这样的处理太赞了!

所以说,Deferred的引入,为处理事件回调提供了更加强大并且更灵活的编程模型。

jQuery中的Deferred和promise的更多相关文章

  1. javascript 学习笔记之JQuery中的Deferred对象

    Deffered是Jquery中的一个非常重要的对象,从1.5版本之后,Jquery中的ajax操作都基于Deffered进行了重构,这个对象的处理模式就像其他Javascript框中的Promise ...

  2. 深入理解jQuery中的Deferred

    引入 1  在开发的过程中,我们经常遇到某些耗时很长的javascript操作,并且伴随着大量的异步. 2  比如我们有一个ajax的操作,这个ajax从发出请求到接收响应需要5秒,在这5秒内我们可以 ...

  3. jQuery 中的 Deferred 和 Promises(转)

    转自:http://www.css88.com/archives/4750/comment-page-1 看前首先了解:Promises/A规范,具体可以看这里,http://www.css88.co ...

  4. jquery中的 deferred之 deferred对象 (一)

    案例: var def=$.Deferred(); console.log(def);//答案见 图1 图1: deferred就是一个有这些方法的对象. 看源码分析: Deferred: funct ...

  5. jquery中的 deferred之 when (三)

    先来看使用案例: var def1 = $.Deferred(); var def2 = $.Deferred(); var def3 = $.Deferred(); var def4 = $.Def ...

  6. jquery中的 deferred之 then (二)

    例: var def = $.Deferred(); var prs1 = def.then(function (val) { var result = val + "_123" ...

  7. jQuery中的deferred对象和extend方法

    1⃣️deferred对象 deferred对象是jQuery的回调函数解决方案,它是从jQuery1.5.0版本开始引入的功能 deferred对象的方法 (1) $.Deferred() 生成一个 ...

  8. Jquery中的 Deferred分析

    参考:https://www.idaima.com/a/1627.html http://www.cnblogs.com/aaronjs/p/3356505.html 未完!

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

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

随机推荐

  1. Android Studio插件推荐-GsonFormat,ButterKnifeZelezny

    原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/50557786 本篇介绍的仅仅适用android studio和 Intellij ...

  2. MongoDbHelper 帮助类(下)

    对MongoDbHelper帮助类进行了一下整合,但是代码中一个方法需要将string类型转化为BsonValue类型一直出错.所以欢迎留言指正 using System; using System. ...

  3. windows 开机总动运行bat文件

    抄自 https://blog.csdn.net/csdnliuxin123524/article/details/78949803 就是把bat文件放到   开始->启动  的那个文件夹里就可 ...

  4. mysql数据库各存储引擎比較

    mysql数据库差别于其它数据库的最重要的一个特点是其插件式的表存储引擎,存储引擎是基于表的.而不是数据库 InnoDB存储引擎:        支持事务,其设计目标主要面向在线事务处理(OLTP)的 ...

  5. $_SERVER['DOCUMENT_ROOT']

    $_SERVER['DOCUMENT_ROOT'] 一.总结 $_SERVER 是一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组 ...

  6. error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

    rsguo:SECONDARY> db.users.find();error: { "$err" : "not master and slaveOk=false&q ...

  7. Intent七在属性之一:ComponentName 分类: H1_ANDROID 2013-11-10 10:54 1184人阅读 评论(1) 收藏

    注:在<疯狂android讲义>中,此属性称为Component,官方文档中称为ComponentName. 1.The name of the component that should ...

  8. listener监听器笔记

    listener:三个域对象的监听器,,还有属性的变化. 监听三个域对象的创建和销毁:servletContextListenerservletRequestListenerservletsessio ...

  9. Photoshop怎么实现图片局部马赛克

    学好ps是一件很重要的事情,作为日常必备技能,不管是在遇到这样的同时请求帮忙或者老板发配的任务的时候,就能分分钟派上用场了. 1:安装运行photoshop,点击文件-打开,选择要ps的图片. 图片. ...

  10. 使用Toolbar + DrawerLayout快速实现高大上菜单侧滑

    如果你有在关注一些遵循最新的Material Design设计规范的应用的话(如果没有,假设你有!),也许会发现有很多使用了看起来很舒服.很高大上的侧滑菜单动画效果,示例如下(via 参考2): 今天 ...