Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了
Promise对象。
特点
- 对象的状态不受外界影响。有三种状态:pending,fulfilled,rejected。
- 2、一旦状态改变,就凝固了,不会再变了。如果改变已发生,再对Promise对象添加回调,也会立即得到这个结果
- 3、一旦新建就会立即执行,无法中断
方法
- Promise.prototype.then
作用:
1、为Promise实例添加状态改变时的回调函数。
2、第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数,都是可选的。
- Promise.prototype.catch
- 为Promise实例添加状态改变为rejected时的回调函数。
- 如果没有使用catch()方法指定错误处理的回调函数,那么Promise对象抛出的错误不会传递到外层代码,即不会用任何的反应。
Promise.prototype.finally - finally方法的回调函数不接受任何参数。
- finally方法里面的操作与状态无关,不依赖于Promise的执行结果。 Promise.all
- 只有实例的状态都变成fullfilled,新的实例的状态才是fullfilled。
- 有一个被rejected,新实例的状态就是rejected(第一个被reject的实例的返回值,会传递给新实例的回调函数)。 Promise.race
- 同样是将多个Promise实例,包装成一个新的Promise实例。
- 只要有一个实例率先改变状态,新实例的状态就跟着改变 。
Promise.allSettled - 只有等到参数数组的所有Promise实例的状态都发生变更,返回的Promise对象才会发生状态变更。
- 一旦发生状态变更,状态总是fulfilled,它的回调函数会接收一个数组作为参数。 Promise.any
- 接收一组Promise实例作为参数,包装成一个新的Promise实例返回。
- 有一个实例的状态变成fulfilled,包装实例的状态就会变成fulfilled。
- 所有实例的状态变成rejected,包装实例的状态就会变成rejected。
- 和Promise.race的区别在于,不会因为某个实例的状态变成rejected状态而结束。 Promise.resolve
- Promise.resolve('foo')等价于 new Promose((resolve)=>{resolve('foo')}) Promise.reject
- 返回一个Promise实例,该实例的状态为rejected