Promise 对象
1.Promise 的含义
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数(回调地狱)。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
2.基本用法
ES6规定,Promise对象是一个构造函数,用来生成Promise实例。
3.Promise.prototype.then()
Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。
4.Promise.prototype.catch()
Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数。
5.Promise.all()
Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例。
p的状态由p1、p2、p3决定,分成两种情况。
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
6.Promise.race()
Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例。
与Promise.all不同,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。
7.Promise.resolve()
有时需要将现有对象转为Promise对象,Promise.resolve方法就起到这个作用。
8.Promise.reject()
Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected。
9.两个有用的附加方法
Promise对象的回调链,不管以then方法或catch方法结尾,要是最后一个方法抛出错误,都有可能无法捕捉到(因为Promise内部的错误不会冒泡到全局)。因此,我们可以提供一个done方法,总是处于回调链的尾端,保证抛出任何可能出现的错误。
finally方法用于指定不管Promise对象最后状态如何,都会执行的操作。它与done方法的最大区别,它接受一个普通的回调函数作为参数
10.应用
加载图片:我们可以将图片的加载写成一个Promise,一旦加载完成,Promise的状态就发生变化。
Generator函数与Promise的结合:使用Generator函数管理流程,遇到异步操作的时候,通常返回一个Promise对象。
11.Promise.try()
让同步函数同步执行,异步函数异步执行,并且让它们具有统一的 API 。
其他: