ES6的Promise对象实例的方法

69 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天juejin.cn/post/712312…

then方法返回值是另外一个新的Promise对象,因此可以采用链式操作

then里成功的回调函数的返回值,相当于then方法的第一个参数,放到then里面。只要then里有返回值,这个返回值就决定了新的Promise的状态是成功的,并且该返回值就是新的Promise对象的then方法里第一个回调函数的参数(即value)

新的Promise的状态由then方法里的第一个成功回调函数的返回值决定的,而且这个返回值必须是reslove对应的那个函数

普通函数嵌套调用与Promise链式操作的区别

catch(回调函数)

作用:用来接收Promise失败时状态的返回值,相当于把then()方法里的第二个函数拿出来了,直接在then方法后面.catch(function(d){}).

他除了可以接收异步事件抛出的错误,如果then方法里的回调函数出现错误,catch也能接收这个回调函数里抛出的错误。 Promise.all([p1,p2,p3])

Promise.prototype.finally()

不管Promise状态如果,都会执行该方法。它什么都不接,就只监听Promise是否完成。Promise里可以搭建一个服务器,不管Promise是否完成,在最后都需要关闭这个服务器,关掉的这个事件就可以写在这个方法里。

Promise构造函数自己本身的方法,必须写Promise.all()

解释:并发操作。合并多个Promise。

合并之后怎么把其中的一个Promise拿出来?

p的状态由p1p2p3决定,分成两种情况。

(1)只有p1p2p3的状态都变成fulfilledp的状态才会变成fulfilled,此时p1p2p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1p2p3之中有一个被rejectedp的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.race()

大p的状态由谁决定?只要p1p2p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

Promise.allSettled()

作用:可以监听所有Promise状态都发生改变了,都执行完了,不管是对和错。 它的状态要等所有的Promise状态变化了,大P才会发生变化,而且它的状态总是fulfilled状态。它的回调函数会接收到一个数组作为参数,该数组的每个成员对应前面数组的每个Promise对象。

Promise.any()

最先成功的那个决定它的状态,只要有一个是成功的,那么它的状态也是成功的。只有所有小Promise全都是失败状态,包装P才会是失败状态。

Promise.resolve(写对象或字符串)

作用:将现有对象转为Promise对象,转换完的Promise对象是成功状态。可以接着用then方法。

Promise.reject(写对象或字符串)

作用:将现有对象转为Promise对象,转换完的Promise对象是失败状态。可以接着用then/catch方法。