Promise
Promise 是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。Promise 的基本语法如下:
js
// 创建 Promise
const promise = new Promise((resolve, reject) => {
// 异步操作
if (success) {
resolve(value) // 状态变为 fulfilled
} else {
reject(error) // 状态变为 rejected
}
})Promise 有三种状态:
pending(等待中)
fulfilled(已成功)
rejected(已失败)
当 Promise 状态变为 fulfilled 或 rejected 时,会触发相应的回调函数。
核心方法
then()
方法:then()
js
promise.then(
value => { /* 成功处理 */ },
error => { /* 可选失败处理 */ }
)失败处理是可选了,一般写法为 promise.then(res => { [方法体] }) ,对于调用 reject 方法出现的 失败 一般都使用专门的 catch() 回调函数
catch()
方法:catch()
js
promise.catch(error => { /* 错误处理 */ })等效写法
js
promise.catch(onRejected)
// 等同于
promise.then(null, onRejected)finally()
方法:finally()
无论成功还是失败,最终都会执行 finally 方法体
js
promise.finally(() => { /* 方法体 */ })链式调用
js
new Promise((resolve, reject) => resolve())
.then(res => new Promise((resolve, reject) => resolve()))
.then(res => new Promise((resolve, reject) => resolve()))
.then(res => new Promise((resolve, reject) => resolve()))
.then(res => new Promise((resolve, reject) => resolve()))
.then(res => console.log(res))静态方法
all
等待所有 Promise 完成,或任意一个 Promise 失败。最终得到一个包含所有的 Promise 结果的数组
js
let arr = [
new Promise((resolve, reject) => resolve(1)),
new Promise((resolve, reject) => resolve(2)),
new Promise((resolve, reject) => resolve(3))
]
Promise.all(arr).then(res => console.log(res)) // [1, 2, 3]allSettled
跟 all 不同的是 all 只要有一个失败,那么就会立即 reject,无法获取其他成功的结果。allSettled 则是会等待所有的 Promise 都结束然后才返回每个 Promise 的执行结果
js
let arr = [
new Promise((resolve, reject) => resolve(1)),
new Promise((resolve, reject) => reject(2)),
new Promise((resolve, reject) => resolve(3))
]
Promise.allSettled(arr).then(res => console.log(res))返回结果
js
[
{ status: 'fulfilled', value: 1 },
{ status: 'rejected', reason: 2 },
{ status: 'fulfilled', value: 3 }
]allSettled 的返回值始终都为 resolve
race
返回最先完成(无论成功或失败)的 Promise 的结果
js
let arr = [
new Promise((resolve, reject) => resolve(1)),
new Promise((resolve, reject) => reject(2)),
new Promise((resolve, reject) => resolve(3))
]
Promise.race(arr).then(res => console.log(res)) // 1resolve/reject
快速创建已解决或已拒绝的 Promise
js
// 已解决
Promise.resolve("成功")
new Promise((resolve, reject) => resolve("成功"))
// 已拒绝
Promise.reject("失败")
new Promise((resolve, reject) => reject("失败"))async/await
async/await 是 JS 中用于处理异步操作的一种语法糖(即更简洁的写法),它基于 Promise 实现
async:用于声明一个函数为异步函数。当函数被调用时,会返回一个 Promiseawait:用于等待一个 Promise 的完成。只有在异步函数内部才能使用await
async/await 的基本语法如下:
js
async function fun() {
await doSomething()
}在使用语法糖的情况下:
return 任意值→ 等价于Promise.resolve(值);throw 任意值→ 等价于Promise.reject(值)(需要确保抛出内容不会被捕获,否则返回状态会变为成功态)
