Promise面试必备:手写Promise.all和Promise.allSettled方法
2024-01-09 15:28:54
前言
Promise是一种异步编程模型,它使开发人员能够更加容易地处理异步操作。Promise.all和Promise.allSettled是Promise常用的两个静态方法,用于处理异步并发请求。
Promise.all
Promise.all方法接收一个Promise数组作为参数,并返回一个新的Promise。该Promise将在所有传入的Promise都解析或拒绝后解析或拒绝。如果所有的Promise都解析了,则返回的Promise将解析为一个包含所有Promise解析值的新数组。如果任何一个Promise被拒绝,则返回的Promise将被拒绝,并以第一个被拒绝的Promise的拒绝原因作为拒绝原因。
Promise.all([
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3)
]).then((values) => {
console.log(values); // [1, 2, 3]
});
Promise.all([
Promise.resolve(1),
Promise.reject(2),
Promise.resolve(3)
]).catch((error) => {
console.log(error); // 2
});
Promise.allSettled
Promise.allSettled方法接收一个Promise数组作为参数,并返回一个新的Promise。该Promise将在所有传入的Promise都解析或拒绝后解析。与Promise.all不同的是,Promise.allSettled将返回一个包含所有Promise解析值或拒绝原因的新数组,无论Promise是解析还是拒绝。
Promise.allSettled([
Promise.resolve(1),
Promise.reject(2),
Promise.resolve(3)
]).then((results) => {
console.log(results);
// [
// { status: 'fulfilled', value: 1 },
// { status: 'rejected', reason: 2 },
// { status: 'fulfilled', value: 3 }
// ]
});
总结
Promise.all和Promise.allSettled是Promise常用的两个静态方法,用于处理异步并发请求。Promise.all方法返回一个新的Promise,该Promise将在所有传入的Promise都解析或拒绝后解析或拒绝。如果所有的Promise都解析了,则返回的Promise将解析为一个包含所有Promise解析值的新数组。如果任何一个Promise被拒绝,则返回的Promise将被拒绝,并以第一个被拒绝的Promise的拒绝原因作为拒绝原因。Promise.allSettled方法也返回一个新的Promise,该Promise将在所有传入的Promise都解析或拒绝后解析。与Promise.all不同的是,Promise.allSettled将返回一个包含所有Promise解析值或拒绝原因的新数组,无论Promise是解析还是拒绝。
在面试中,手写Promise.all和Promise.allSettled方法是一个常见的考题。掌握这两个方法的实现原理和使用方法,可以让你在面试中脱颖而出。