ES6之Promise
Promise是一个对象,用来传递异步操作的消息,他有两个特点:第一对象的状态不受外界的影响,第二一旦状态改变就不会在变,任何时候都可以得到这个结果,他有两个参数分别是resolve(他的作用是将Promise的状态从未完成变成成功,在异步操作成功时调用,并将异步操作的结果作为参数传递出去)和reject(他的作用是将Promise的状态从未完成变成失败,在异步操作失败时调用,并将异步操作报出的错误作为参数传递出去),下图是Promise机制图。

Promise示例生成后,可以用then方法分别指定Resolved状态和Rejected状态的回调函数,then方法可以接受两个回调函数作为参数,第一个回调函数是Promise对象的状态变为Resolved时可以调用,第二是回调函数是Promise对象的状态变为Rejected时调用。因为then方法返回的是一个新的Promise实例,所以可以采用链式的写法。catch()是用于指定发生错误时的回调函数,Rejected具有“冒泡”性质如果在三层代码块,第三层没有catch()第二层有catch()那么他会捕获错误,如果一个catch()都没有的话Promise的错误不会传递到外层代码(切记切记)。
var p1 = new Promise(function(resolve, reject) {
resolve("成功");
});
p1.then(function(value) {
console.log(value); // "成功!"
throw "哦,不!";
})
.catch(function(e) {
console.log(e); // "哦,不!"
});
如果你想将多个Promsie实例包装成一个新的Promise实例,那么使用Promise.all()方法,形式如var p = Promise.all([p1,p2,p3]);注意:如果包装成一个新的Promise那么只要有一个reject那么就会返回reject,如果全为resolve那么都会是resolve,这个包装是一个&,一个为假全为假,全真才是真。
还有一个和Promise.all()方法类似的一个方法是Promise.race()方法,该方法也是将多个Promise实例包装成一个新的Promise示例,形式如var p = Promise.race([p1,p2,p3]);注意:如果参数之中有一个示例率先改变状态那么p的状态就会改变,率先改变的Promise实例的返回值就传递给p的回调函数。
如果你需要将现有的对象转化为Promise对象的resolve状态,那么使用Promise.resolve()。
Promise.resolve("Success").then(function(value) {
console.log(value); // "Success"
}, function(value) { });
如果你需要将现有的对象转化为Promise对象的reject状态,那么使用Promise.reject()。
Promise.reject("Testing static reject").then(function(reason) { // 未被调用 }, function(reason) { console.log(reason); // "测试静态拒绝" });
ES6之Promise的更多相关文章
- ES6的promise对象研究
ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...
- ES6的Promise
推荐一下我觉得不错关于Promise的好文章,通俗易懂 说起ES6的Promise就要提及一下JQ的$.when()方法,两者基本相同 面试的时候经常会问Promise,如果同学们能在回答Promis ...
- ES6语法 promise用法
ES6语法 promise用法 function doSomething(){ return new Promise((resolve,reject)=>{ resolve('jjjj');// ...
- 浅谈ES6原生Promise
浅谈ES6原生Promise 转载 作者:samchowgo 链接:https://segmentfault.com/a/1190000006708151 ES6标准出炉之前,一个幽灵,回调的幽灵,游 ...
- ES6之Promise用法详解
一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...
- ES6中promise总结
一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...
- ES6新增"Promise"可避免回调地狱
Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...
- 关于ES6的Promise的使用深入理解
ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...
- 解读Es6之 promise
单线程: 在同一时间只能有同一任务进行.JavaScript就是一门单线程语言 当有多个任务需要进行时,则需要进行排队,前一个执行完毕才能执行下一个; ...
- 【前端开发】】ES6属性promise封装js动画
如下是我写的demo源码: 可以直接复制用浏览器打开看到效果哦: <!DOCTYPE html> <html> <head> <meta charset=&q ...
随机推荐
- linux 运维常用工具表
https://code.google.com/p/httperf/ ※测量Web服务器的性能 ./configure make &&make install http://ww ...
- eclipse环境下基于已构建struts2项目整合spring+hibernate
本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...
- A:点排序-poj
A:点排序 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个点的坐标(x, y),在输入的n个点中,依次计算这些点到指定点的距离,并按照距离进行从小到大排序,并且输出点的坐标 ...
- 【原创】python基于大数据现实双色球预测
前提准备:利用sql筛选出每个球出现概率最高的前5个数 原理:先爬出所有的历史数据,然后模拟摇奖机出球的机制并大量模拟计算,直到出现列表中的某一个数后即停 注意事项:由于计算过程数据量很大,需要加入内 ...
- Android-DataBinding入门1
1.需要开启DataBinding功能: 在build.gradle配置: android{ dataBinding{ enabled = true } } 2.布局 布局中,根节点要以layout开 ...
- OpenStack搭建遇到的问题
前言:对于像我这种新手来说,搭建OpenStack真的很费劲,因为我总是每配置一个服务,我就想弄懂,后来搭建过程很累人,因此我想了个办法,等我搭建出来再学.我这里将记录我从开始之初到我学习,再到我毕业 ...
- Redis各个数据类型的使用场景
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). Redis列表命令 参考:http://www.r ...
- 解决zabbix中文显示乱码问题
中文显示问题,图表乱码 解决办法: [root@zabbix ~]# cd /usr/share/zabbix/include/ [root@zabbix include]# vim locales. ...
- YiShop_商城网站设计应该注意什么
商城网站的建设,不是一件简单的事情,当然,也不要把商城网站的建设想得那么的复杂,在建设商城网站的时候 ,只要考虑到以下这些因素,定能把商城网站建设工作做好.那么商城网站建设要考虑哪些因素:(1)风格 ...
- [Android App]IFCTT,即:If Copy Then That,是一个基于IFTTT的"This"实现
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/8075738.html IFCTT,即:If Copy Then ...