Promise

119 阅读2分钟

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 微信图片_20211220162704.png

参考链接:
ECMAScript 6 入门](es6.ruanyifeng.com/#docs/promi…)