🚉 Promise 相关 API
# Promise 构造函数
Promise (excutor) {}
executor
函数: 执行器(resolve, reject) => {}
resolve
函数:内部定义成功时我们调用的函数value => {}
reject
函数:内部定义失败时我们调用的函数reason => {}
说明: executor
会在 Promise
内部立即同步调用(⚠️),异步操作在执行器中执行。
# Promise.prototype.then
方法
(onResolved, onRejected) => {}
- onResolved 函数:成功的回调函数
(value) => {}
- onRejected 函数:失败的回调函数
(reason) => {}
说明:指定用于得到成功 value
的成功回调和用于得到失败 reason
的失败回调,返回一个新的 Promise 对象。
# Promise.prototype.catch
方法
(onRejected) => {}
onRejected
函数:失败的回调函数(reason) => {}
说明: then()
的语法糖,相当于: then(undefined, onRejected)
🌰 例子:
点击查看
let p = new Promise((resolve, reject)=>{
reject('error')
})
p.catch(reason => {
console.log(reason)
})
2
3
4
5
6
7
# Promise.resolve
方法
(value) => {}
value
:成功的数据或 Promise 对象
说明:返回一个成功 / 失败的 Promise 对象
🌰 例子:
let p1 = Promise.resolve(111)
console.log(p1) // 传入的参数为非Promise类型的对象,则返回的结果为成功的Promise对象
// 如果传入的参数为Promise对象,参数的结果决定了resolve的结果
let p2 = Promise.resolve(new Promise((resolve, reject)=>{
// resolve("success")
reject("Error")
}))
// console.log(p2);
p2.catch(reason => {
console.log(reason)
})
2
3
4
5
6
7
8
9
10
11
12
# Promise.reject
方法
(reason) => {}
reason
:失败的原因。
说明:返回一个失败的 Promise 对象。
🌰 例子:
let p = Promise.reject(666) // 无论传入什么类型的值都返回失败的Promise对象
let p2 = Promise.reject(new Promise((resolve, reject)=>{
resolve("success")
}))
console.log(p2) // p2的状态为失败,值为传入Promise对象的值
2
3
4
5
# Promise.all
方法
(promises) => {}
promises
:包含 n 个 Promise 的数组
说明:返回一个新的 Promise,只有所有的 Promise 都成功才成功,只要有一个失败了就直接失败。
let p1 = new Promise((resolve, reject) => {
resolve('OK');
})
// let p2 = Promise.resolve('Success');
let p2 = Promise.reject('Error');
let p3 = Promise.resolve('Oh Yeah');
//
const result = Promise.all([p1, p2, p3]);
console.log(result);
2
3
4
5
6
7
8
9
10
# Promise.race
方法
(promises) => {}
promises
:包含 n 个 Promise 对象的数组。
说明:返回一个新的 Promise,第一个完成的 Promise 的结果状态就是最终的结果状态。
🌰 例子:
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('OK');
}, 1000);})
let p2 = Promise.resolve('Success');
let p3 = Promise.resolve('Oh Yeah');
const result = Promise.race([p1,p2,p3])
console.log(result) // p2的结果状态
2
3
4
5
6
7
8
9
# 总结
# 总结 (opens new window)
Promise
类有 6 种静态方法:
Promise.all(promises)
:等待所有 promise 都 resolve 时,返回存放它们结果的数组。如果给定的任意一个 promise 为 reject,那么它就会变成Promise.all
的 error,所有其他 promise 的结果都会被忽略。Promise.allSettled(promises)
1(ES2020 新增方法) 等待所有 promise 都 settle 时,并以包含以下内容的对象数组的形式返回它们的结果:
status
:"fulfilled"
或"rejected"
value
(如果 fulfilled)或reason
(如果 rejected)。
Promise.race(promises)
—— 等待第一个 settle 的 promise,并将其 result/error 作为结果返回。Promise.any(promises)
(ES2021 新增方法): 等待第一个 fulfilled 的 promise,并将其结果作为结果返回。如果所有 promise 都 rejected,Promise.any
则会抛出AggregateError
(opens new window) 错误类型的 error 实例。Promise.resolve(value)
:使用给定 value 创建一个 resolved 的 promise。Promise.reject(error)
: 使用给定 error 创建一个 rejected 的 promise。
Promise.all
可能是在实战中使用最多的。