Promise
含义:
Promise
对象是一个构造函数。一旦创建它就会立即执行,不能中途取消
Promise
构造函数接受一个函数作为参数,该函数的两个参数分别是resolve
和reject
。
有三种状态:pending初始,fulfilled成功,rejected失败,一旦发生,状态就会凝固,不会再变
1.创建 Promise
新建一个构造函数,两个参数,都是函数resolve(value),reject(error);
const promise = new Promise((resolve, reject) => {
// 异步操作
if (/* 成功条件 */) {
resolve(value); // 成功时调用
} else {
reject(error); // 失败时调用
}
});
2.实例方法
2.1then() - 处理 Promise 的成功状态
promise.then(
value => { /* 处理成功结果 */ },
);
2.2catch() - 处理 Promise 的失败状态
promise.catch(
error => { /* 处理错误 */ }
);
2.3finally() - 无论成功失败都会执行
promise.finally(
() => { /* 清理操作 */ }
);
3.静态方法
Promise.all() - 等待所有 Promise 完成
适用场景:
- 需要等待多个不相关的异步操作全部完成
- 需要保持多个异步结果的顺序
Promise.all([promise1, promise2, ...])
.then(values => { /* 所有 Promise 都成功 */ })
.catch(error => { /* 任一 Promise 失败 */ });
//返回值是一个数组,包含所有输入 Promise 的 解析值(resolve values),且顺序与输入顺序一致
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);
Promise.all([p1, p2, p3])
.then(values => {
console.log(values); // [1, 2, 3]
});
//返回的是 第一个被拒绝的 Promise 的原因(rejection reason)
const p1 = Promise.resolve(1);
const p2 = Promise.reject('Error occurred');
const p3 = Promise.resolve(3);
Promise.all([p1, p2, p3])
.catch(reason => {
console.log(reason); // "Error occurred"
});
注意,如果作为参数的 Promise 实例,自己定义了catch
方法,那么它一旦被rejected
,并不会触发Promise.all()
的catch
方法
Promise.allSettled() - 等待所有 Promise 完成(无论成功失败)
Promise.allSettled([promise1, promise2, ...])
.then(results => { /* 包含每个 Promise 的状态和值/原因 */ });
Promise.race() - 返回第一个完成的 Promise
Promise.race([promise1, promise2, ...])
.then(value => { /* 第一个成功的 Promise */ })
.catch(error => { /* 第一个失败的 Promise */ });
Promise.any() - 返回第一个成功的 Promise
Promise.any([promise1, promise2, ...])
.then(value => { /* 第一个成功的 Promise */ })
.catch(errors => { /* 所有 Promise 都失败 */ });
Promise.resolve()/reject() 创建已解决/拒绝的Promise
promise的练习题 juejin.cn/post/684490…