返回
Promise 的其他方法与特性
前端
2023-12-27 01:59:54
Promise.resolve() 方法
Promise.resolve() 方法用于将一个值或一个 Promise 对象转换为一个新的 Promise 对象。如果传入的值是一个 Promise 对象,则返回这个 Promise 对象本身;如果传入的值是一个普通值,则返回一个新的 Promise 对象,该 Promise 对象的状态为 resolved,并且值为传入的值。
const promise1 = Promise.resolve(42);
promise1.then(value => {
console.log(value); // 输出:42
});
const promise2 = Promise.resolve(Promise.resolve(43));
promise2.then(value => {
console.log(value); // 输出:43
});
Promise.race() 方法
Promise.race() 方法用于将多个 Promise 对象包装成一个新的 Promise 对象。这个新的 Promise 对象的状态取决于传入的 Promise 对象中最先完成的 Promise 对象的状态。如果传入的 Promise 对象都失败,则新的 Promise 对象的状态也为失败。
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(42);
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('Error');
}, 2000);
});
Promise.race([promise1, promise2]).then(value => {
console.log(value); // 输出:42
}).catch(error => {
console.log(error); // 不会执行
});
Promise.all() 方法
Promise.all() 方法用于将多个 Promise 对象包装成一个新的 Promise 对象。这个新的 Promise 对象的状态取决于传入的 Promise 对象的所有状态。只有当传入的 Promise 对象都成功完成时,新的 Promise 对象的状态才为成功;否则,新的 Promise 对象的状态为失败。
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(42);
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Hello');
}, 2000);
});
Promise.all([promise1, promise2]).then(values => {
console.log(values); // 输出:[42, 'Hello']
}).catch(error => {
console.log(error); // 不会执行
});
Promise.finally() 方法
Promise.finally() 方法用于在 Promise 对象完成(无论成功还是失败)后执行指定的回调函数。这个回调函数不接收任何参数,也不返回任何值。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(42);
}, 1000);
});
promise.finally(() => {
console.log('Promise completed');
}).then(value => {
console.log(value); // 输出:42
});
Promise.allSettled() 方法
Promise.allSettled() 方法用于将多个 Promise 对象包装成一个新的 Promise 对象。这个新的 Promise 对象的状态始终为成功,并且其值是一个数组,其中包含传入的 Promise 对象的所有状态。
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(42);
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('Error');
}, 2000);
});
Promise.allSettled([promise1, promise2]).then(results => {
console.log(results); // 输出:[
{ status: 'fulfilled', value: 42 },
{ status: 'rejected', reason: 'Error' }
]
});