除了前面提到的then()
、catch()
、Promise.all()
、Promise.race()
之外,Promise还有以下一些常用方法:
Promise.resolve()
- 功能:创建一个状态为
Fulfilled
的Promise实例,并将传递的值作为Promise的成功结果。如果传递的值本身就是一个Promise,那么它会直接返回这个Promise;如果传递的值是一个具有then
方法的对象,它会将这个对象“promisify”,即转化为一个Promise。 - 示例
const resolvedPromise = Promise.resolve('成功的值');
resolvedPromise.then((value) => {
console.log(value); // 输出:成功的值
});
// 如果传入一个Promise
const existingPromise = new Promise((resolve) => setTimeout(() => resolve('已存在的Promise的值'), 1000));
const newPromise = Promise.resolve(existingPromise);
newPromise.then((value) => {
console.log(value); // 输出:已存在的Promise的值
});
Promise.reject()
- 功能:创建一个状态为
Rejected
的Promise实例,传递的值会作为Promise被拒绝的原因。 - 示例
const rejectedPromise = Promise.reject(new Error('操作失败')); rejectedPromise.catch((error) => { console.log(error.message); // 输出:操作失败 });
Promise.allSettled()
- 功能:接受一个Promise数组作为参数,当所有的Promise都已经敲定(settled),即每个Promise都已经变为
Fulfilled
或Rejected
状态时,它才会返回。返回的Promise的结果是一个包含每个Promise结果的对象数组,每个对象包含status
(状态)和value
(成功的值)或reason
(失败的原因)属性。 - 示例
const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve, reject) => setTimeout(() => reject(new Error('失败原因')), 2000));
const promise3 = Promise.resolve(3);
Promise.allSettled([promise1, promise2, promise3]).then((results) => {
console.log(results);
// 输出:
// [
// { status: 'fulfilled', value: 1 },
// { status: 'rejected', reason: Error: 失败原因 },
// { status: 'fulfilled', value: 3 }
// ]
});
Promise.any()
- 功能:接受一个Promise数组,只要数组中的任何一个Promise变为
Fulfilled
状态,它就会返回这个Promise的成功结果。如果所有的Promise都被Rejected
,它会返回一个AggregateError
,包含所有被拒绝的原因。 - 示例
const promise1 = new Promise((resolve) => setTimeout(() => resolve('结果1'), 3000));
const promise2 = new Promise((resolve) => setTimeout(() => resolve('结果2'), 1000));
const promise3 = new Promise((resolve) => setTimeout(() => resolve('结果3'), 2000));
Promise.any([promise1, promise2, promise3]).then((result) => {
console.log(result); // 输出:结果2
});
finally()
- 功能:无论Promise的最终状态是
Fulfilled
还是Rejected
,finally()
方法中的回调函数都会被执行。它通常用于执行一些清理操作,比如关闭文件、释放资源等。 - 示例
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
const success = true;
if (success) {
resolve('操作成功');
} else {
reject('操作失败');
}
}, 2000);
});
myPromise.then((result) => {
console.log(result);
}).catch((error) => {
console.log(error);
}).finally(() => {
console.log('无论成功失败,我都会执行');
});