目录

🚉 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)
})
1
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)
})
1
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对象的值
1
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);
1
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的结果状态
1
2
3
4
5
6
7
8
9

# 总结

# 总结 (opens new window)

Promise 类有 6 种静态方法:

  1. Promise.all(promises) :等待所有 promise 都 resolve 时,返回存放它们结果的数组。如果给定的任意一个 promise 为 reject,那么它就会变成 Promise.all 的 error,所有其他 promise 的结果都会被忽略

  2. Promise.allSettled(promises)
    
    1

    (ES2020 新增方法) 等待所有 promise 都 settle 时,并以包含以下内容的对象数组的形式返回它们的结果:

    • status : "fulfilled""rejected"
    • value (如果 fulfilled)或 reason (如果 rejected)。
  3. Promise.race(promises) —— 等待第一个 settle 的 promise,并将其 result/error 作为结果返回。

  4. Promise.any(promises) (ES2021 新增方法): 等待第一个 fulfilled 的 promise,并将其结果作为结果返回。如果所有 promise 都 rejected, Promise.any 则会抛出 AggregateError (opens new window) 错误类型的 error 实例。

  5. Promise.resolve(value) :使用给定 value 创建一个 resolved 的 promise。

  6. Promise.reject(error) : 使用给定 error 创建一个 rejected 的 promise。

Promise.all 可能是在实战中使用最多的。

📢 上次更新: 2022/09/02, 10:18:16