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的更多相关文章

  1. ES6的promise对象研究

    ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...

  2. ES6的Promise

    推荐一下我觉得不错关于Promise的好文章,通俗易懂 说起ES6的Promise就要提及一下JQ的$.when()方法,两者基本相同 面试的时候经常会问Promise,如果同学们能在回答Promis ...

  3. ES6语法 promise用法

    ES6语法 promise用法 function doSomething(){ return new Promise((resolve,reject)=>{ resolve('jjjj');// ...

  4. 浅谈ES6原生Promise

    浅谈ES6原生Promise 转载 作者:samchowgo 链接:https://segmentfault.com/a/1190000006708151 ES6标准出炉之前,一个幽灵,回调的幽灵,游 ...

  5. ES6之Promise用法详解

    一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...

  6. ES6中promise总结

    一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...

  7. ES6新增"Promise"可避免回调地狱

    Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...

  8. 关于ES6的Promise的使用深入理解

    ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...

  9. 解读Es6之 promise

            单线程:  在同一时间只能有同一任务进行.JavaScript就是一门单线程语言                 当有多个任务需要进行时,则需要进行排队,前一个执行完毕才能执行下一个; ...

  10. 【前端开发】】ES6属性promise封装js动画

    如下是我写的demo源码: 可以直接复制用浏览器打开看到效果哦: <!DOCTYPE html> <html> <head> <meta charset=&q ...

随机推荐

  1. 从cdn说起

    为什么要使用cdn 雅虎军规有一条规则建议我们是用cdn.随便在网上搜索,可以找到使用的cdn的好处. 再次强调第一条黄金定律,减少网页内容的下载时间.提高下载速度还可以通过CDN(内容分发网络)来提 ...

  2. MySQL执行一个查询的过程

    总体流程 客户端发送一条查询给服务器: 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果.否则进入下一阶段: 服务器端进行SQL解析.预处理,再由优化器生成对应的执行计划: MyS ...

  3. TensorFlow学习笔记(一):数据操作指南

    扩充 TensorFlow tf.tile 对数据进行扩充操作 import tensorflow as tf temp = tf.tile([1,2,3],[2]) temp2 = tf.tile( ...

  4. ArrayList迭代过程删除问题

    一:首先看下几个ArrayList循环过程删除元素的方法(一下内容均基于jdk7): package list; import java.util.ArrayList; import java.uti ...

  5. Python 简单理解多线程

    进程,是一个或多个线程的集合,每个进程在内存中是相对独立的. 线程,是计算机最小的运算单元,每个进程至少要有一个线程,多个线程时,每个线程间之间共享内存. 分别举例常规运行和多线程运行: 0)常规运行 ...

  6. MyBatis开发学习记录

    使用MyBatis时主要是完成POJO和SQL的映射规则 MyBatis基本构成: SqlSessionFactoryBuilder SqlSessionFactory SqlSession SqlM ...

  7. 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区

    开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的. 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我的子线程更新了 UI 没报错? 我 ...

  8. python学习笔记 tuple

    1. ()去声明.与list类似,但是其元素不能改变. 2. 需要注意的是1中的不能改变是指()中的元素不能改变,如果其元素是一个list,那么list中的元素是可以改变的,不论是大小还是其他的. 3 ...

  9. oracle 物化视图 job

    在oracle数据库里边,创建物化视图之后,系统在DBMS_jobs文件夹下,会自动创建相应的job,右键执行job的时候报错如下: 问题:ORA-12012: 自动执行作业 198 出错 ORA-1 ...

  10. 数细胞-swust oj

    数细胞(0964) 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.编程需要用到的队列及其相关函数已经实现,你只需要完 ...