最近做项目遇到了异步调用上千个,但是,最后的结果要进行加和处理。
但是,如果直接移步加和的话会出现各种问题。
参考资料
代码
因为感觉还是原来的例子给的简便,所以,直接贴一下。
第一步:首先先对请求的方法进行封装 Promise
。
1 2 3 4 5 6 7 8 9 10 11 12 13
| fn(formData,config,index){ return new Promise((resolve, reject) => { upload(formData,config).then(res => { if (res.code === 200) { resolve(res); } else { this.$message.error(res.msg); document.querySelector('#file').value = ''; } }).catch(err => { }) }); },
|
第二步:使用 async
和 await
再对Promise
进行封装 并返回Promise
的值
1 2 3 4
| async test(formData,config,index){ let n = await this.fn(formData,config,index) return n },
|
第三步:再循环里执行async
的函数
1 2 3 4
| var arr = [] for (var i=0;i<5;i++){ arr.push(this.test(formData,config,i)) }
|
第四步:再用 Promise.all
的方法进行解析
1 2 3 4 5
| Promise.all(arr).then(res => { console.log(res); }).catch(err => { console.log('error', err) })
|
Promise.all
方法中的 res
就是for
循环中按顺序请求返回的结果