Promise.all

Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。在处理多个异步处理,比如第二个ajax请求需要依靠第一个ajax请求时就能排上用场,因为Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即第一个请求的结果始终在第二个请求的结果前,即便它的结果获取要比第二个请求要晚,这样不用担心发送多个请求时的返回结果顺序问题。
代码:
在这里插入图片描述
在这里插入图片描述

### Promise.allPromise.allSettled 的区别及用法 #### 1. 基本行为 Promise.all 接收一个包含 Promise 的可迭代对象,并等待所有 Promise 完成。只有当所有 Promise 都成功(fulfilled)时,它才会返回一个包含所有结果的数组[^1]。如果任何一个 Promise 失败(rejected),整个 Promise.all 将立即被拒绝,并返回第一个失败的 Promise 的错误原因。 相比之下,Promise.allSettled 同样接收一个包含 Promise 的可迭代对象,但它会等待所有 Promise 完成,无论它们是成功还是失败。它的返回值是一个数组,其中每个元素都是一个对象,表示对应 Promise 的最终状态(fulfilled 或 rejected),以及对应的值或错误原因[^3]。 #### 2. 返回值 - **Promise.all**: - 成功时:返回一个数组,数组中的每个元素是传入的 Promise 的结果,顺序与传入的 Promise 顺序一致。 - 失败时:返回第一个失败的 Promise 的错误原因,并忽略其他 Promise 的结果。 - **Promise.allSettled**: - 返回一个数组,数组中的每个元素是一个对象,包含以下属性: - `status`:Promise 的状态,值为 `'fulfilled'` 或 `'rejected'`。 - `value`(如果状态是 fulfilled):Promise 的结果。 - `reason`(如果状态是 rejected):Promise 的错误原因。 #### 3. 示例代码 以下是两个方法的使用示例: ```javascript // Promise.all 示例 const promises = [ Promise.resolve(1), Promise.resolve(2), Promise.reject('Error'), ]; Promise.all(promises) .then(values => { console.log(values); // 不会执行,因为有一个 Promise 被拒绝 }) .catch(error => { console.error(error); // 输出: Error }); // Promise.allSettled 示例 const promisesSettled = [ Promise.resolve('Data'), Promise.reject('Network Error'), new Promise(res => setTimeout(res, 100, 'Delay')), ]; Promise.allSettled(promisesSettled) .then(results => { console.log(results.map(r => r.status)); // 输出: ["fulfilled", "rejected", "fulfilled"] console.log(results[0].value); // 输出: Data console.log(results[1].reason); // 输出: Network Error }); ``` #### 4. 差异总览 | 特性 | Promise.all() | Promise.allSettled() | |-------------------|---------------------------------------|------------------------------------------| | 完成条件 | 所有 Promise 必须成功 | 等待所有 Promise 完成(无论成功/失败) | | 返回值 | 成功结果数组 | 包含状态的对象数组 | | 失败行为 | 立即拒绝(首个失败的 Promise) | 不拒绝,返回所有 Promise 的最终状态 | | 适用场景 | 强依赖的并行任务 | 需要完整结果分析的批量操作 | #### 总结 - **Promise.all**:适合所有 Promise 必须成功的场景,一旦某个 Promise 失败,整个调用将立即被拒绝。 - **Promise.allSettled**:适合需要知道所有 Promise 最终状态的场景,无论成功或失败。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值