ES6——Promise

promise

含义:异步编程解决方案

特点:1、状态不受外界影响,状态有三种:pending、fulfilled、rejected

           2、状态不可逆,只能pending -> fulfilled、pending -> rejected

缺点:无法取消、不设置回调函数时,内部错误外部无法获知、pending状态时不知具体进度

执行顺序:Promise执行 -> 同步代码执行  ->then执行 (事件循环机制)

若一个promise的resolve将一个promise作为参数,那么这个promise的状态会失效,转而以参数的promise状态为准。

resovle、reject不会阻止后续代码的执行,所以推荐在resovle和reject前添加return

promise.then

返回一个新的promise实例,可以实现链式调用,接受两个参数,第一个是resovle的回调函数,第二个是reject的回调函数

promise.catch

.then(null, rejection)、.then(undefined,rejection)的别名,捕获错误

推荐在链式调用之后,添加catch,他会捕获整个过程中的所有报错

promise.finally (ES2018)

不管promise执行结果是什么,都会执行finally函数

promise.all 

含义:将多个promise实例包装成一个新的promise实例

参数:参数是具有iterator接口的数组或类数组,如果参数不是promise,会首先调用promise的resovle转换成promise,然后执行。

执行结果:都是fulfilled,其状态为fulfilled,

                  一个是rejected,其状态为rejected

                   结果顺序与参数顺序一致

                  多promise执行结果是并的关系

注意: 如果参数有自己的catch方法,promise.all的catch就不会捕获到这个错误,因为参数的catch执行完返回了一个promise是resolve。

promise.race 

与.all含义、参数都一致。

执行结果:只接收第一个执行结束的promise结果。多promise执行结果是或的关系

众多参数执行是或的关系。

promise.allSettled 

与all和race参数一致,

执行结果:不受任何一个promise的结果影响,会一直执行完所有promise,然后结果变成fulfilled。返回结果为数组对象。

ES6——Promise_第1张图片

 promise.any 

参数与上述函数一致

执行结果:一个fulfilled,其状态变为fulfilled

                 全部rejected,其状态为rejected

promise.resovle

将一个现有对象转为一个promise对象

1、参数是promise,不做修改直接返回

2、参数是thenable对象,转为promise对象,直接执行then方法

3、不是thenable对象,或根本不是对象,转为resovled状态的promise

4、没有参数,转为promise

promise.reject

返回一个promise对象,状态为rejected。

promise.try

参数是同步,则同步执行,参数是异步,则异步执行

你可能感兴趣的:(ES6,es6,前端,javascript)