在JavaScript中,Promise.all()
和Promise.allSettled()
是两个用于处理多个Promise对象的API,它们都可以接收一个Promise实例的数组作为参数,但它们的处理方式和返回结果有所不同,下面我们来详细了解一下这两个方法的使用。
1、Promise.all()
Promise.all()
方法接收一个Promise实例的数组作为参数,当数组中的所有Promise对象都成功地完成(fulfilled)时,它会返回一个新的Promise对象,这个新的Promise对象的结果是所有成功完成的Promise对象的结果组成的数组,如果数组中的任何一个Promise对象被拒绝(rejected),那么Promise.all()
会立即返回一个被拒绝的Promise对象,而不会再等待其他Promise对象的状态。
使用示例:
const promise1 = Promise.resolve(1); const promise2 = new Promise((resolve, reject) => { setTimeout(() => { resolve(2); }, 1000); }); const promise3 = Promise.resolve(3); Promise.all([promise1, promise2, promise3]) .then((values) => { console.log(values); // 输出:[1, 2, 3] }) .catch((error) => { console.error(error); });
2、Promise.allSettled()
Promise.allSettled()
方法同样接收一个Promise实例的数组作为参数,但它的处理方式与Promise.all()
不同,无论数组中的Promise对象是成功完成还是被拒绝,Promise.allSettled()
都会等待所有的Promise对象状态都确定后,返回一个新的Promise对象,这个新的Promise对象的结果是所有Promise对象的结果组成的数组,每个元素都是一个对象,包含两个属性:status
(表示Promise对象的状态,可以是"fulfilled"或"rejected")和value
(表示Promise对象的结果)。
使用示例:
const promise1 = Promise.resolve(1); const promise2 = new Promise((resolve, reject) => { setTimeout(() => { resolve(2); }, 1000); }); const promise3 = Promise.reject(new Error("Error occurred")); Promise.allSettled([promise1, promise2, promise3]) .then((results) => { console.log(results); // 输出: // [ // { status: "fulfilled", value: 1 }, // { status: "fulfilled", value: 2 }, // { status: "rejected", reason: Error("Error occurred") } // ] });
Promise.all()
和Promise.allSettled()
都可以用于处理多个Promise对象,但它们的行为和返回结果有所不同。Promise.all()
在遇到第一个被拒绝的Promise对象时就会立即返回一个被拒绝的Promise对象,而Promise.allSettled()
会等待所有的Promise对象状态都确定后再返回结果,在实际开发中,我们可以根据需求选择合适的方法来处理多个Promise对象。
最新评论
本站CDN与莫名CDN同款、亚太CDN、速度还不错,值得推荐。
感谢推荐我们公司产品、有什么活动会第一时间公布!
我在用这类站群服务器、还可以. 用很多年了。