关于promise
后来发现promise是解决异步的一个链式调用的好的方法,避免了所谓的回调的监狱,
它有三个状态,未作为,已经完成和已经失败,起始是未作为,然后有了动作总会有个结果,
分成resolve,已经顺利ok和reject执行失败,promise传递参数就靠这两个状态,已经达成某个状态,那就
不可能再是另外种状态了了!使用方法如我代码:写了好几遍了,实现方式一种是es6的原生的promise对象
另外种方式是jquery的deferred对象.看代码了:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>promise by jquery and es6</title>
<script type="text/javascript" src='../jquery-2.2.3.min.js'></script>
</head>
<body>
<h1>this is the promise page test</h1>
<textarea cols='100' rows="10"></textarea> <script type="text/javascript">
//first 用es6自带的promise作为尝试的方法来做异步
/**
var app = {
es6_promise:function(url){
var promise = new Promise(function(resolve,reject){
$.ajax({
type:'get',
data:{},
url:url,
success:function(msg){
resolve(msg);
console.log('first place '+msg);
},
error:function(msg){
reject(msg);
}
})
});
return promise;
},
setDely:function(){
var promise = new Promise(function(resolve,reject){
setTimeout(function(){
resolve('this is setTimeout');
},2000)
// alert('this is from ajax msg '+ajaxData);
alert('this is alert after setTimeout');
})
return promise;
}
}
app.es6_promise('/promise/our.json')
.then(function(data){console.log('second '+data);return 'hello';})
.then(function(data){console.info('third '+data)}) app.setDely()
.then(function(msg){console.log(msg);return '我爱钟亚姬'})
.then(function(msg){alert(msg);return '我终于可以娶到钟亚姬了'})
.then(function(data){alert(data)});
**/ //jquery 的deferred jquery版本高于1.5方可
//deferred情况一,连续的链式调用
/*
$.ajax({
url:'/promise/plan.json',
type:'get',
data:{},
dataType:'json',
}).done(function(msg){
console.log('first time successfully!');
console.info(msg);
}).done(function(msg){
console.log('second time successfully!');
console.info(msg);
}).fail(function(data){
console.log('this is first time that i am fail!');
})
*/ //$.when来处理多个defer对象[处理延时和回调的方法]
/*
$.when($.ajax({url:'/promise/plan.json',type:'get'}),$.ajax({url:'/promise/our.json',type:'get'}))
.done(function(first,second){
alert('request is finished');console.log(first);console.info(second)
})
*/ /*自定义的deferred的方法来解决异步问题!*/ /*这样不行,因为没有定义deferred对象,执行会先显示here is done再出现alert
function wait(){
var task = function(){
alert('hello , I success later');
}
setTimeout(task,3000);
}
$.when(wait())
.done(function(){console.log('here is done')})
.fail(function(){console.log('here is fali')})
*/ //自己定义deferred对象即可
/*
var promise_jquery = $.Deferred(); var wait = function(promise_jquery){
var deal = function(){
alert('i am async inside');
//这里是体现了仅仅有一种状态发生在一个函数内部所以,哈哈
promise_jquery.resolve('this is the data be back');
promise_jquery.reject('this is erro inside');//这个没有接收到
}
setTimeout(deal,3000);
return promise_jquery;
}
$.when(wait(promise_jquery))
.done(function(data){
alert(data);
})
//对应上述,这里纠正产没有反应了
.fail(function(data){
alert(data)
})
*/ //防止状态外部被改变的方法
/*
var wait = function(){
var dtd = $.Deferred();
var in_ = function(){
alert('this is inside function');
dtd.resolve('I miss you zhongyaji');
}
setTimeout(in_,2000);
return dtd.promise();
} $.when(wait())
.done(function(msg){
alert(msg);
}).done(function(){
alert('I love you fairy');
})
*/
</script> <!--再来描绘一遍,复习一发-->
<script type="text/javascript">
// var zhongyaji = function(){
// var promise = new Promise(function(resolve,reject){
// $.ajax({
// url:'/promise/our.json',
// type:'get',
// data:{},
// }).done(function(data){
// resolve(data);
// }).fail(function(data){
// reject(data);
// })
// })
// return promise;
// }
// zhongyaji().then(function(data){
// console.log(data);
// }) // function fairy(){
// var promise = new Promise(function(resolve,reject){
// setTimeout(function(){
// console.log('我爱钟亚姬,哈哈,好怪');
// resolve('I love you!')
// },2000);
// })
// return promise;
// }
// fairy().then(function(data){
// console.log(data);
// })
//哈哈,这些实例老子写的还是溜得不行啦哈哈
function sleep(){
var defer = $.Deferred();
setTimeout(function(){
alert('my love to you is deep');
defer.resolve('this is love');
},3000)
return defer.promise();
}
$.when(sleep()).done(function(data){
console.log(data);
})
</script> </body>
</html>
关于promise的更多相关文章
- Javascript - Promise学习笔记
最近工作轻松了点,想起了以前总是看到的一个单词promise,于是耐心下来学习了一下. 一:Promise是什么?为什么会有这个东西? 首先说明,Promise是为了解决javascript异步编 ...
- 路由的Resolve机制(需要了解promise)
angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js $stateProvider .state ...
- angular2系列教程(七)Injectable、Promise、Interface、使用服务
今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...
- 闲话Promise机制
Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js ...
- 深入理解jQuery、Angular、node中的Promise
最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供 ...
- Promise的前世今生和妙用技巧
浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...
- JavaScript进阶之路——认识和使用Promise,重构你的Js代码
一转眼,这2015年上半年就过去了,差不多一个月没有写博客了,"罪过罪过"啊~~.进入了七月份,也就意味着我们上半年苦逼的单身生活结束了,从此刻起,我们要打起十二分的精神,开始下半 ...
- 细说Promise
一.前言 JavaScript是单线程的,固,一次只能执行一个任务,当有一个任务耗时很长时,后面的任务就必须等待.那么,有什么办法,可以解决这类问题呢?(抛开WebWorker不谈),那就是让代码异步 ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
- angular学习笔记(二十八-附2)-$http,$resource中的promise对象
下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource) ...
随机推荐
- BZOJ 1854 游戏
Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有\(2\)个属性,这些属性的值用\([1,10000]\)之间的数表示.当他使用某种装备时,他只能使用该 ...
- [BZOJ 3564] [SHOI2014] 信号增幅仪 【最小圆覆盖】
题目链接:BZOJ - 3564 题目分析 求最小椭圆覆盖,题目给定了椭圆的长轴与 x 轴正方向的夹角,给定了椭圆长轴与短轴的比值. 那么先将所有点旋转一个角度,使椭圆长轴与 x 轴平行,再将所有点的 ...
- [BZOJ 1029] [JSOI2007] 建筑抢修 【贪心】
题目链接:BZOJ - 1029 题目分析 使用一种贪心策略. 现将任务按照deadline从小到大排序. 然后枚举每一个任务,如果当前消耗的时间加上完成这个任务的时间不会超过这个任务的deadlin ...
- SKProductsRequest ios 7不调用delegate
在iOS7中,内购只能在真机上才会调用 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProdu ...
- 截断WM_SYSCOMMAND的SC_CLOSE命令(VC与Delphi双版本)
WM_SYSCOMMAND - 系统命令消息,当点击最大化按钮,最小化按钮,关闭按钮等.都会收到这个消息.常用于窗口关闭时提示用户处理.WPARAM - 具体的命令,例如 关闭 SC_CLOSELPA ...
- 修改uCOS_II以实现“优先级+时间片”联合调度
本文在uCOS II上增加时间片任务调度的的原理: 对设置为同优先级的任务使用时间片调度,不同优先级任务仍然使用uCOS II的优先级调度策略.在同优先级任务的时间片调度中,所有任务暂时时间片长度固定 ...
- Linux学习笔记6——映射虚拟内存
使用到两个函数mmap:用于分配内存:munmap:用于释放内存. mmap的原型如下: void *mmap( void *start, //指定映射的虚拟地址 0由系统指定开始位置 ...
- 《JavaScript核心概念》基础部分重点摘录
注:<JavaScript核心概念>适合深入了解JavaScript,比我买的<JavaScript框架设计>语言和内容丰富多了(可能是我水平尚浅吧). 1. 作用域 var ...
- 爬虫技术实战 | WooYun知识库
爬虫技术实战 | WooYun知识库 爬虫技术实战 大数据分析与机器学习领域Python兵器谱-大数据邦-微头条(wtoutiao.com) 大数据分析与机器学习领域Python兵器谱
- 杭州(含嘉兴,绍兴,金华,湖州,义乌)Uber优步司机奖励政策(1月25日~1月31日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...