Promise.race
、Promise.all
和 Promise.allSettled
都是处理多个 Promise
对象的静态方法,它们的主要区别在于处理 Promise
的方式和返回结果。下面是这三者的详细比较:
1. Promise.all
-
功能:接受一个
Promise
对象的可迭代对象(通常是数组),并返回一个新的Promise
对象。这个新的Promise
对象在所有输入的Promise
对象都成功时成功,并返回一个包含所有成功Promise
结果的数组。如果其中任何一个Promise
失败,则立即失败,并返回第一个失败的Promise
的拒绝理由。 -
返回值:一个
Promise
对象。成功时,返回一个数组,其中包含每个输入Promise
对象的结果;失败时,返回第一个失败的Promise
的拒绝原因。 -
使用示例:
Promise.all([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]) .then((results) => { console.log(results); // [1, 2, 3] }) .catch((error) => { console.error(error); });
2. Promise.race
-
功能:接受一个
Promise
对象的可迭代对象(通常是数组),并返回一个新的Promise
对象。这个新的Promise
对象将会在第一个输入的Promise
对象解决或拒绝时解决或拒绝,而不管其他Promise
对象的状态。 -
返回值:一个
Promise
对象。它的状态由第一个解决或拒绝的Promise
决定。 -
使用示例:
Promise.race([ new Promise((resolve) => setTimeout(resolve, 500, "first")), new Promise((resolve) => setTimeout(resolve, 100, "second")), ]).then((result) => { console.log(result); // 'second' (因为它首先解决) });
3. Promise.allSettled
-
功能:接受一个
Promise
对象的可迭代对象(通常是数组),并返回一个新的Promise
对象。这个新的Promise
对象在所有输入的Promise
对象都完成时解决(无论成功还是失败),并返回一个数组,其中每个元素是一个对象,描述了对应Promise
对象的结果或拒绝原因。 -
返回值:一个
Promise
对象。成功时,返回一个包含每个输入Promise
对象的结果的数组,每个结果对象有两个属性:status
(“fulfilled” 或 “rejected”)和value
(如果成功)或reason
(如果失败)。 -
使用示例:
Promise.allSettled([ Promise.resolve(1), Promise.reject(new Error("Failed")), Promise.resolve(3), ]).then((results) => { console.log(results); /* [ { status: 'fulfilled', value: 1 }, { status: 'rejected', reason: Error('Failed') }, { status: 'fulfilled', value: 3 } ] */ });