整理ES6:Promise的忽略点和几个方法的区别

发布 : 2023-07-05 分类 : JavaScript

原文链接:https://github.com/taoliujun/blog/issues/2

Promise是业务开发中使用率最高的ES6方法了,但日常容易忽略几个点,以及记不得它几个方法的区别,现记录。

容易忽略的点

  • catchthen的语法糖,但是catch可以捕获then中的异常,而then的第二个回调函数不行。
  • 如果没有使用catch捕获错误,那么Promise的错误不会传递到外层,即使外层有try...catch也捕获不到。
  • 因为catch捕获了rejected且返回新的实例,所以在all等方法中,p1实现了catch方法,则p1的rejected不会触发p的catch

几个方法的区别

方法 resolved的前提 rejected的前提 说明
all 全部resolved 任一rejected -
race 任一resolved 任一rejected 任一率先改变的状态,传递给p
allSettled 全部改变 - 状态全部改变,传递给p。格式为:
{status: 'fulfilled', value: value}
或者
{status: 'rejected', reason: reason}
any 任一resolved 全部rejected 传递给catch的是一个AggregateError实例

AggregateError

AggregateError封装了Error数组,它的结构是:

AggregateError(errors[, message])

AggregateError()构造函数可以接受两个参数。

  • errors:数组,它的每个成员都是一个错误对象。该参数是必须的。
  • message:字符串,表示 AggregateError 抛出时的提示信息。该参数是可选的。