多个请求 Promise.all 使用

该代码片段展示了如何利用Promise.all和Array.prototype.map方法并发处理多个请求。letlen变量用于计数,当所有请求完成,len的值等于val.length时,打印出请求成功后的数据res。
       let len = 0;
       Promise.all(val.map((item, index) => {
          len++;
          return 请求方法(item); //查询列表对应的每一个数值
        })).then(res => {
          if (Number(len) == Number(val.length)) {
            console.log(res)
            //res就是请求成功后返回的数据
          }
        })

JavaScript 中,如果需要发起多个异步请求并等待所有请求完成,可以使用 `Promise.all()` 方法来实现。该方法接受一个 Promise 可迭代对象(如数组),并返回一个新的 Promise 对象。当所有输入的 Promise 都成功完成时,`Promise.all()` 返回的 Promise 才会执行 `.then()` 回调,并以数组的形式返回每个 Promise 的结果,结果的顺序与传入的 Promise 顺序一致。 例如: ```javascript const request1 = fetch('https://api.example.com/data1'); const request2 = fetch('https://api.example.com/data2'); const request3 = fetch('https://api.example.com/data3'); Promise.all([request1, request2, request3]) .then(responses => { return Promise.all(responses.map(response => response.json())); }) .then(data => { console.log(data); // 输出: [data1结果, data2结果, data3结果] }) .catch(error => { console.error('其中一个请求失败:', error); }); ``` 上述代码中,多个请求被同时发起,并且整体等待它们全部完成。如果其中任意一个请求失败,则整个 `Promise.all()` 立即进入 `.catch()` 分支,这表明 `Promise.all()` 对错误非常敏感[^4]。 如果希望即使某些请求失败也继续处理其他请求的结果,可以使用 `Promise.allSettled()`。这个方法与 `Promise.all()` 类似,但它不会因某个 Promise 被拒绝而立即结束,而是等到所有 Promise 都有结果后才返回一个包含每个 Promise 状态和结果的数组。示例: ```javascript Promise.allSettled([request1, request2, request3]) .then(results => { results.forEach((result, index) => { if (result.status === 'fulfilled') { console.log(`请求 ${index + 1} 成功,结果为:`, result.value); } else { console.log(`请求 ${index + 1} 失败,原因为:`, result.reason); } }); }); ``` 通过这种方式,可以更好地控制多个异步操作的行为,尤其是在对失败容忍度较高的场景下,`Promise.allSettled()` 提供了更全面的信息反馈[^3]。 需要注意的是,在实际开发中应尽量避免不必要的串行执行,而是利用 `Promise.all()` 或 `Promise.allSettled()` 来并行处理多个没有依赖关系的异步任务,从而显著提升代码的性能和响应速度[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值