学习笔记:es6——Promise 对象学习
1Promise的含义:
Promise是异步编程的一种解决方案;
Promise是一个对象,可以获取异步操作的消息,提供统一的api,各种异步操作都可以用同样的方式处理;
Promise对象有以下两个特点:
- 对象状态不受外界影响。Promise代表一个一步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。只有一步操作的结果可以决定是哪一种状态,其他任何操作无法改变这个状态。
- 一旦状态改变,就不会再变,任何时候都可以得到这个结果;
Promise对象的优点:
可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。控制异步操作更加容易。
promise对象的缺点:
一旦新建就会立即执行,无法中途取消;如果不设置回调函数,Promise内部抛出的错误,不会反映到外部;
2基本用法:
es6中规定Promise是一个构造函数,下面创造一个Promise实例:
resolve,reject参数是由js引擎提供,不用自己部署;
resolve函数的作用是在异步操作成功时调用,并将异步操作的结果作为参数传递出去;
reject函数的作用是在异步操作失败时调用,并将异步操作报出的错误作为参数传递出去;
Promise实例生成之后,可以用then方法分别指定resolve和reject状态的回调函数;
then方法接受两个回调函数作为参数,第一个回调是Promise对象状态变为resolve时调用,第二个则是Promise对象状态变为reject时调用;
Promise新建后会立即执行
打印结果是1 3 2
新建对象中代码立即执行,then方法属于异步函数,所以会在所有同步函数执行完成之后执行。
下面是异步加载图片的例子:
如果调用resolve和reject时带有参数,这个参数会传递给回调函数;resolve函数的参数除了正常的函数值外,还可能是另一个Promise实例:
p2实例的resolve方法将p1作为参数:一个异步操作的结果是返回另一个异步操作;
p1的状态决定了p2的状态。如果p1的状态是pending,那么p2的回调函数就会等待p1的状态改变;如果p1的状态已经是resolved或rejected,那么p2的回调函数将会立刻执行。
Promise在调用了resolve或reject后任务就完成了,后继操作应放到then方法里面执行,所以Promise实例中调用了resolve或reject后在后面最好加上return语句