上一篇
📢 最新动态(2025年7月)
随着Web应用复杂度的提升,前端对高效并发请求的需求越来越高,最新Chrome浏览器优化了Promise.allSettled()
的性能,使得批量处理异步请求更加流畅!🚀
在电商、数据分析等场景中,我们经常需要同时获取多个接口的数据。
如果逐个发送请求,会导致页面加载慢、用户体验差!😫
const request1 = fetch('/api/user'); const request2 = fetch('/api/products'); const request3 = fetch('/api/recommend'); Promise.all([request1, request2, request3]) .then(responses => { console.log('所有请求成功!', responses); }) .catch(error => { console.error('有一个请求失败啦!', error); // 任意失败即触发 });
适用场景:需要所有请求都成功才能继续操作(如支付流程)
const requests = [ fetch('/api/comments'), fetch('/api/ratings'), fetch('/api/invalid-url') // 假设这个会失败 ]; Promise.allSettled(requests) .then(results => { results.forEach(result => { if (result.status === 'fulfilled') { console.log('成功数据:', result.value); } else { console.warn('失败原因:', result.reason); // 不会阻断其他请求 } }); });
适用场景:需要统计所有请求结果(如批量导出数据)
async function batchRequests(urls, maxConcurrent = 3) { const results = []; for (let i = 0; i < urls.length; i += maxConcurrent) { const batch = urls.slice(i, i + maxConcurrent); const batchResults = await Promise.allSettled(batch.map(url => fetch(url))); results.push(...batchResults); console.log(`已完成批次 ${i/maxConcurrent + 1} 🎯`); } return results; } // 使用示例 const urls = ['/api/data1', '/api/data2', ..., '/api/data10']; batchRequests(urls, 2); // 每次最多2个并发
✅ 错误处理:为每个请求添加.catch
,避免单个失败导致页面卡死
✅ 取消请求:使用AbortController
可中途取消批量请求
❌ 避免嵌套:不要在一个请求回调里发起下一个请求(会变成串行!)
💡 性能优化:对于大数据量请求,考虑服务端合并接口
批量处理AJAX请求能显著提升页面性能!根据场景选择:
Promise.all
→ 强依赖所有结果的场景 Promise.allSettled
→ 允许部分失败的场景 现在就去优化你的代码吧!✨ 2025年的用户可不会容忍慢吞吞的网页哦~
本文由 嘉悠柔 于2025-07-31发表在【云服务器提供商】,文中图片由(嘉悠柔)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/496604.html
发表评论