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。返回结果为数组对象。
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
参数是同步,则同步执行,参数是异步,则异步执行