结论:一个带有
then
方法的对象,就是一个Promise
Promise A+规范
在ES6(2015年)之前,为解决回调地狱与异步处理不统一的问题,民间开发组织提出了Promise A+规范,其中概述了“一个带有 then
方法的对象,就是一个Promise”的概念,且具体描述了在 then
方法中应该如何处理的规范。此规范被多个第三方库开发者采用,形成了初步的Promise规范。
// 带有then方法的对象
const newPromise = () => {
then() {
...
}
}
Promise构造函数
ES6根据Promise A+规范,提出了符合规范的Promise构造函数,可用过 new Promise()
创建一个Promise对象,并在规范基础上,增加了多个方法与API。
// 声明一个Promise
const newPromise = new Promise()
// 方法
newPromise
.then(() => {}) // then方法,Promise运行成功后的异步回调
.catch(() => {}) // catch方法,Promise运行失败后的异步回调
// API
Promise.all([newPromise1, newPromise2, ...]) // 多个Promise均执行成功,才会调用then方法进入对应回调
Promise.race([newPromise1, newPromise2, ...]) // 多个Promise谁先执行完成,谁就调用对应方法进入回调
Promise.any([newPromise1, newPromise2, ...]) // 只要有一个Promise成功,就会调用then方法进入回调
// ES2020新增API
// 用于确认是否所有Promise均结束(无论成功失败)
// 返回一个对象数组,[{status: 'fulfilled' | 'rejected', val: error | resolved}]
Promise.allSettled([newPromise1, newPromise2, ...])
评论区