promise.all()

本文介绍如何使用Promise对象结合jQuery来处理多个AJAX异步请求。通过Promise.all方法可以等待一组异步操作全部完成,并在成功回调中获取所有的响应结果。这种方式能够简化复杂的异步流程控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

promise对象和jq结合处理ajax多个异步任务

 Promise.all([//all 接收一个数组
            $.ajax({url:'data/arr.txt',dataType:'json'}),
            $.ajax({url:'data/num.txt',dataType:'json'}),
            //...
        ]).then(
            //then 接收两个函数为参数,
                // 第一个函数表示所有异步任务都成功了 
                // 参数为一个数组 保存着所有异步任务的响应数据
                // 第二个函数表示有的任务失败了 参数为错误对象
            function (arr) {
                let [arg1,arg2]=arr;
                //打印任务1的响应数据
                console.log(arg1);
                //打印任务2的响应数据
                console.log(arg2);},
            function (err) {
                //打印错误对象
                console.log(err)
        })



### 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、付费专栏及课程。

余额充值