javascript - 如何等待所有请求完成?
问题描述
我如何等待循环中的所有 axios 请求完成?
这是我的代码:
async uploadMedia({ getters, commit }, payload) {
await commit('setUploadLoading', true)
const upload = new Promise((resolve) => {
payload.forEach((item, index) => {
const form = new FormData()
form.append('file', payload[index])
form.append('token', getters.getCustomerToken)
form.append('no', index)
this.$axios
.post(`${process.env.API_URL}/visa/uploadfile`, form, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(() => resolve())
})
})
await upload.then(() => commit('setUploadLoading', true))
await upload.finally(() => commit('setUploadLoading', false))
}
我在这个循环中提出了 2 个请求,但我不知道如何等到所有请求都完成。
解决方案
利用Promise.all
async uploadMedia({ getters, commit }, payload) {
await commit('setUploadLoading', true)
const upload = new Promise((resolve) => {
const unresolvedPromises = [] // array of promises
payload.forEach((item, index) => {
const form = new FormData()
form.append('file', payload[index])
form.append('token', getters.getCustomerToken)
form.append('no', index)
const promise = this.$axios
.post(`${process.env.API_URL}/visa/uploadfile`, form, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
unresolvedPromises.push(promise) // push promise to array
})
const resolvedPromises =
Promise.all(unresolvedPromises).then(res => console.log(res)) // wait for all promises to be resolved
})
await upload.then(() => commit('setUploadLoading', true))
await upload.finally(() => commit('setUploadLoading', false))
}
文档:https ://developer.mozilla.org/tr/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
推荐阅读
- java - 如何接受用户输入的范围内的整数
- mysql - 如何通过在 Spring Boot 中使用实体来解决 SQL 语法错误?
- c# - DropDownList 问题 ASP.NET
- java - 怎么用下划线代替重复的单词,Java‽
- java - 如何在jsp中将本地视频放到我的本地主机
- python - TensorFlow 中的张量 n 模式积
- javascript - Chrome 文件系统 API 挂起
- python-3.x - For循环用于在Python中使用多线程的对象列表
- jquery - 如何在 jQuery 的一种方法中使用 show() 和 hide() 制作三个重复的 if 条件?
- swift - 重用和改变init