Promise.all 用法
-
定义:
Promise.all()
方法接受一个包含多个 Promise 实例的可迭代对象(如数组),并返回一个新的 Promise 实例。该 Promise 实例会在所有输入的 Promise 都成功解决时被解决,或者在任意一个 Promise 被拒绝时被拒绝。 -
工作机制:
-
全部成功或立即失败:只有当所有提供的 Promise 都成功解决时,
Promise.all()
返回的 Promise 才会变为 resolved 状态,并返回一个包含所有 Promise 结果的数组。如果其中一个 Promise 被拒绝,Promise.all()
返回的 Promise 将立即变为 rejected 状态,并返回第一个被拒绝的 Promise 的错误信息。 -
结果顺序:返回的结果数组中的元素顺序与输入的 Promise 数组中的顺序一致,与各 Promise 完成的先后顺序无关。
-
-
示例:
const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = Promise.resolve(3); Promise.all([promise1, promise2, promise3]).then((results) => { console.log(results); // 输出 [1, 2, 3] });
Promise.allSettled 用法
-
定义:
Promise.allSettled()
方法接受一个包含多个 Promise 实例的可迭代对象(如数组),并返回一个新的 Promise 实例。该 Promise 实例会在所有输入的 Promise 都确定其结果(无论是成功还是失败)时被解决。 -
工作机制:
-
全部完成:无论输入的 Promise 是成功还是失败,
Promise.allSettled()
返回的 Promise 都会等待所有 Promise 完成后才变为 resolved 状态。 -
结果格式:返回的 Promise 的值是一个数组,每个元素对应于原始 Promises 数组中的一个位置,表示相应 Promise 的结果或原因。如果 Promise 成功,则为
{status: 'fulfilled', value: result}
;如果 Promise 失败,则为{status: 'rejected', reason: error}
。
-
-
示例:
const promise1 = Promise.resolve(1); const promise2 = Promise.reject('错误'); const promise3 = new Promise((resolve) => setTimeout(resolve, 100, 3)); Promise.allSettled([promise1, promise2, promise3]).then((results) => { console.log(results); /* [ {status: "fulfilled", value: 1}, {status: "rejected", reason: "错误"}, {status: "fulfilled", value: 3} ] */ });
Promise.all 和 Promise.allSettled 的区别
-
错误处理:
-
Promise.all()
会在任意一个 Promise 被拒绝时立即终止执行并返回错误,不会等待其他 Promise 完成。 -
Promise.allSettled()
则会等待所有 Promise 完成,无论它们是成功还是失败,然后返回每个 Promise 的结果或原因。
-
-
结果返回:
-
Promise.all()
返回的结果是一个数组,包含所有 Promise 的成功结果,顺序与输入的 Promise 数组一致。 -
Promise.allSettled()
返回的结果是一个数组,每个元素是一个对象,包含对应 Promise 的状态和值或原因。
-
-
适用场景:
-
Promise.all()
适用于所有异步任务都需要成功完成的情况,例如多个数据请求都必须成功才能继续后续操作。 -
Promise.allSettled()
适用于需要同时发起多个异步操作,并希望知道每个操作的具体结果的情况,即使部分操作失败也不会影响整体流程。
-