单个axios操作可以在then()中定义后续同步操作,但for循环axios并不能直接.then(),因此需要将其包装为一个整体的Promise才能定义后续同步操作 下面先将for循环中的axios操作定义为一个返回Promise对象的函数,这里axios请求成功后.then()中的resolve一定不要忽略了!!!
getSingleFeature: function (element) {
var this_ = this
return new Promise((resolve, reject) => {
this_.$axios.get('/file', {
params: {
filePath: xxx
},
}).then(function (response) {
console.log('got file')
resolve()
}).catch(function (error) {
console.log(error)
})
})
}
接下来将函数返回的Promise对象加入到一个数组中
let asyncFun = []
for (var element of response.data.data) {
asyncFun.push(this_.getSingleFeature(element))
}
Promise.all可以将多个Promise实例,包装成一个新的Promise实例,这样我们就把for循环中若干个Promise对象合体成了一个独立的Promise对象,方便进行.then()操作
Promise.all(asyncFun).then(() => {
console.log('complete')
this_.loading = false
})
|