//……关于promise
什么是promise?
promise 翻译成中文的意思是 "承诺" ,一个承诺说出去了说明他是进行中的,承诺兑现了代表成功,没有兑现代表失败了。
promise 对象的状态一旦发生改变,就不可逆
promise有三个状态:
pending 进行中
resolved 成功 成功后执行 promise 的 then() 方法的第一个参数,第二个参数是指失败后执行的参数
rejected 失败 失败后还可以执行 promise 的 catch() 方法的参数
大白话:假期我承诺 “不打游戏” ,这个承诺就是 pending 状态。假期后没打游戏,就代表这个承诺成功了,就是 resolve 状态,可以给自己一个奖励,这个奖励用 then() 方法执行,反之就是失败了,就是 rejected 状态,给自己一个惩罚,这个惩罚就是 catch() 方法。
promise 是一个用来解决异步问题的构造函数。
解决定时器的异步,使定时器同步执行
function fn(){
var pro = new Promise( function(succ,failed){
setTimeout( function(){
console.log( 1 );
succ();
} , 1000)
} )
return pro;
}
var promise = fn();
promise.then( function(){
console.log( 2 )
} )
解决 ajax 的异步,使其同步执行
//ajax封装 使用promise对象
function ajaxPromise(url){
var pro = new Promise(function(succ,failed){
var ajax = new XMLHttpRequest();
ajax.open( "get" , url );
ajax.send();
ajax.onreadystatechange = function(){
if( ajax.readyState == 4 && ajax.status == 200 ){
//成功了 ajax.responseText
succ(ajax.responseText);//通知promise对象ajax请求服务器的数据成功了
}
}
//承诺多久后如果没有通知promise对象成功 就通知失败
setTimeout( function(){
failed("请求服务器失败");
},5000 )
}) return pro;
}
var pro = ajaxPromise("../data.json");
pro.then( function(msg){
alert( msg );
},function(msg){
alert( msg );
} )
//……关于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) ...
随机推荐
- [SDOI2016]墙上的句子
题目描述 考古学家发现了一堵写有未知语言的白色墙壁,上面有一个n行m列的格子,其中有些格子内被填入了某个A至Z的大写字母,还有些格子是空白的. 一直横着或竖着的连续若干个字母会形成一个单词,且每一行的 ...
- [Usaco2006 Jan] Dollar Dayz 奶牛商店
Description 约翰到奶牛商场里买工具.商场里有K(1≤K≤100).种工具,价格分别为1,2,-,K美元.约翰手里有N(1≤N≤1000)美元,必须花完.那他有多少种购买的组合呢? Inpu ...
- Android开发学习——android反编译
第一种: 1.下载下边的三个jar包,对dex2jar和jd-gui进行解压 2.将需要反编译的apk后缀名改为.rar,然后进行解压 3.将解压后生成的classes.dex加入第一步解压后的dex ...
- MS SqlServer 通过数据库日志文件找回已删除的记录
1.建立演示数据(创建数据库数据表添加基础数据) 1.1 创建数据库 1.2 创建数据表 1.3填充数据 1.4做数据库完整备份 2.模拟误删除.记录操作时间.备份数据库日志 2.1删除数据并记录操作 ...
- 关于OPPO手机的生存和程序员的发展
关于程序员私下讨论最多的话题,除了哪个编程最牛逼之外,哪款品牌的手机最牛逼也是我们谈论最多的话题之一吧!有的喜欢罗永浩,自然就是锤粉:有的喜欢苹果,称它为工业时代最优美的艺术品:当然,我想也有很多的人 ...
- JAVA 高级特性 JDBC
需要的jdbc jar 包: mysql-connector-java-5.1.38-b...960.9 KB ojdbc6.jar2.0 MB sqljdbc4.jar455.4 KB 数据持 ...
- poj2718 Smallest Difference
思路: 暴力乱搞. 实现: #include <iostream> #include <cstdio> #include <sstream> #include &l ...
- 快速排序算法原理及其js实现
要说快排的原理,通俗点说就是把一个事情,分成很多小事情来处理,分治的思想. 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这10个数进行排序.首先在这个序列中随便找一个数作为 ...
- win7+idea+maven搭建spark源码阅读环境
1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...
- H.264和HEVC分析软件和工具【转】
一.264分析两大利器:264VISA和Elecard StreamEye Tools 264visa 强力的h264实时分析工具 ,能分析各种场合下的h264资源,适用于h264开发者,学习者.在图 ...