Promise.all()在项目中获取多个异步请求
Promise.all()简单地理解是:可以将多个Promise实例组合成一个新实例,并且仅在所有实例都为fulfilled时组合后的Promise才会变成fulfilled,任意一个实例被rejected,那么组合后的Promise就变为rejected。
1 const p1 = new Promise((resolve, reject) => { 2 resolve('success') 3 }) 4 5 const p2 = new Promise((resolve, reject) => { 6 resolve('success') 7 }) 8 9 const p3 = new Promise((resolve, reject) => { 10 reject('failed') 11 }) 12 13 Promise.all([p1, p2]) 14 .then(result => { 15 console.log(result) 16 }) 17 .catch(err => { 18 console.log(err) 19 }) 20 // ['success', 'success'] 21 22 Promise.all([p1, p3]) 23 .then(result => { 24 console.log(result) 25 }) 26 .catch(err => { 27 console.log(err) 28 }) 29 // failed
Promise.all()的结果时一个数组,和传入的Promise实例数组顺序一致,若rejected,则传入第一个rejected的结果。
如果内部Promise实例有catch方法,则reject时会调用自身的reject,否则调用外部catch。
在多个请求中使用Promise.all()可以实现多个请求同时完成的效果。下面是一个项目中使用的例子:
1 const param =this.postdata 2 Promise.all([this.$post('admin/listBoardDataV2', param), this.$post('admin/listAllTopList', param)]) 3 .then(([previousRes, res]) => { 4 // ... 5 })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通