场景:需要循环执行一个异步函数,拿到所有的结果后再执行后面的操作
在网上找了好多,好像都不是特别能用,自己摸索了一下搞了出来,但是也不知道原理是什么,以vue框架为实例,代码如下:
ajaxPost(args) { // return 一个promise对象
const obj = {}
return new Promise((resolve, reject) => {
console.log(args)
resolve('success')
})
},
promiseFun(x) {
const obj = {}
// 调异步函数拿到值
this.ajaxPost({ value: x }).then(res => {
obj.x = x
obj.data = res
})
return obj // 一定要写在这里,才拿得到
},
postLoopFun() {
// 循环异步函数
const arr = ['1', '2', '3', '4']
const funArr = []
arr.forEach(i => {
funArr.push(this.promiseFun(i))
})
// funArr 是一个promise数组
Promise.all([funArr]).then(data => {
// 拿到所有的值,一个数组,按照顺序的,例如我上面传了4个,这里就有4个
console.log(data)
})
},