关于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 2754: [SCOI2012]喵星球上的点名
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 649 Solved: 305[Submit][Sta ...
- Gems
zoj2332:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2332 题意:这一道题的题意,我看了很久,也没有看明白,最终 ...
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 下载地址
是不是有很多朋友在oracle找不到历史版本的下载地址哈.... 下载我亲情奉献,有人的捧个人场..... 嘻嘻 jdk1.5updatex所有版本下载地址: http://www.oracle.co ...
- HDU 5916 Harmonic Value Description 【构造】(2016中国大学生程序设计竞赛(长春))
Harmonic Value Description Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- QTP自动化测试权威指南 连载(一)
第一章 简介 什么是自动化测试 自动化测试是对一个已有的手工测试过程减少并尽可能排除人工干预的过程. 什么时候适合做自动化测试 下面是一组适合将手工测试自动化的考量因素: ● 测试需要经常重复. ● ...
- 【转】 U3D DrawCall优化手记 - 夜阑卧听风吹雨
原文 http://www.cnblogs.com/ybgame/p/3588795.html 在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这 ...
- Oracle 插入超4000字节的CLOB字段的处理方法
最近在做系统开发的时候需要想Oracle数据库插入超过4000字节的CLOB字段,在网上查询了N久才发现下面的解决方案,故留存以备后查. 我们可以通过创建单独的OracleCommand来进行指定的插 ...
- Eclipse Maven插件无法搜索远程库
创建Maven工程,发现添加依赖“Add Dependency”的时候无法自动搜索远程库. 导致此问题的可能原因: 1.update index的时候失败了. 解决:打开Window/Show Vie ...
- Sorting Algorithm
sorting 应该是最容易被考到的东西,自己老是学了背,背了忘.为了方便复习,这里进行总结 1. Bubble Sort 定义:每两个两个比较,每扫完一次,当前扫过的最大值放在了末尾. for i ...
- Error: rpmdb open failed
yumrpmdb: Thread/process 17132/140266190264064 failed: Thread died in Berkeley DB l ...