最近在工作中遇到一个需求,需要前端向后端发出多个请求,这本来是很容易做到的事情,使用promise.all就可以进行构造。
例如:
Promise.all([promise1, promise2])
看起来似乎可以,但是我的需求在发送时是不知道promise数量的,也就是说promise数组需要用一个变量传进去。
一开始我尝试使用:
let promise_arr = []
promise_arr.push(promise1, promise2)
Promise.all(promise_arr)
结果可想而知,在使用Promise.all之前,promise1和promise2中的请求就已经发出,因此无法捕捉到Promise.all的结果。
查过StackOverflow之后得到了解决方法,使用数组自带的map函数。
运行时使用数组的map函数,动态调用原数组来产生promise数组,这样可以保证promise的执行在all函数这里才开始。
let promise_arr = [‘1‘, ‘2‘]
Promise.all(promise_arr.map((val, index) => {
/* 构造promise_arr中元素的替换函数, val代表数组迭代的当前元素,index数组元素的当前下标 */
return axios_fun(val); //这样可以使用axios_fun函数产生的promise元素来替代promise_arr第index项的值
}))
前端入门级野生程序员,若有错漏,望指正。
原文:https://www.cnblogs.com/shenyingge/p/14457130.html