学习笔记:es6——Promise 对象学习

1Promise的含义:

Promise是异步编程的一种解决方案;

Promise是一个对象,可以获取异步操作的消息,提供统一的api,各种异步操作都可以用同样的方式处理;

Promise对象有以下两个特点:

  1. 对象状态不受外界影响。Promise代表一个一步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。只有一步操作的结果可以决定是哪一种状态,其他任何操作无法改变这个状态。
  2. 一旦状态改变,就不会再变,任何时候都可以得到这个结果;

Promise对象的优点:
可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。控制异步操作更加容易。

promise对象的缺点:
一旦新建就会立即执行,无法中途取消;如果不设置回调函数,Promise内部抛出的错误,不会反映到外部;

2基本用法:

es6中规定Promise是一个构造函数,下面创造一个Promise实例:

学习笔记:es6——Promise 对象学习
resolve,reject参数是由js引擎提供,不用自己部署;
resolve函数的作用是在异步操作成功时调用,并将异步操作的结果作为参数传递出去;
reject函数的作用是在异步操作失败时调用,并将异步操作报出的错误作为参数传递出去;
Promise实例生成之后,可以用then方法分别指定resolve和reject状态的回调函数;
学习笔记:es6——Promise 对象学习
then方法接受两个回调函数作为参数,第一个回调是Promise对象状态变为resolve时调用,第二个则是Promise对象状态变为reject时调用;

Promise新建后会立即执行
学习笔记:es6——Promise 对象学习
打印结果是1 3 2
新建对象中代码立即执行,then方法属于异步函数,所以会在所有同步函数执行完成之后执行。

下面是异步加载图片的例子:
学习笔记:es6——Promise 对象学习

如果调用resolve和reject时带有参数,这个参数会传递给回调函数;resolve函数的参数除了正常的函数值外,还可能是另一个Promise实例:
学习笔记:es6——Promise 对象学习
p2实例的resolve方法将p1作为参数:一个异步操作的结果是返回另一个异步操作;
p1的状态决定了p2的状态。如果p1的状态是pending,那么p2的回调函数就会等待p1的状态改变;如果p1的状态已经是resolved或rejected,那么p2的回调函数将会立刻执行。

Promise在调用了resolve或reject后任务就完成了,后继操作应放到then方法里面执行,所以Promise实例中调用了resolve或reject后在后面最好加上return语句

学习笔记:es6——Promise 对象学习