【发布时间】:2021-08-21 04:32:32
【问题描述】:
我有一个批量创建参与者功能,使用 Promise.allSettled 发送 100 个 axios POST 请求。后端是Express,前端是React。该请求调用单个add new participant REST API。我已使用connect-timeout 将后端超时设置为 15 秒。并且前端是 10s 超时。
我的问题是当我单击批量添加按钮时,会触发批量创建并且 Promise.allSettled 并发启动。但是,我无法在所有并发请求完成之前发送新请求。因为我在前端设置了超时,所以新的请求会被取消。
有没有办法,我仍然可以发出并发请求,但该请求不会停止其他新请求?
这是前端代码,createParticipant 是 API 请求。
const PromiseArr = []
for (let i = 0; i < totalNumber; i++) {
const participant = participantList[i]
const participantNewDetail = {
firstName: participant.firstName,
lastName: participant.lastName,
email: participant.email,
}
PromiseArr.push(
createParticipant(participantNewDetail)
.then((createParticipantResult) => {
processedTask++
processMessage = `Processing adding participant`
dispatch({ type: ACTIVATE_PROCESS_PROCESSING, payload: { processedTask, processMessage } })
})
.catch((error) => {
processedTask++
processMessage = `Processing adding participant`
dispatch({ type: ACTIVATE_PROCESS_PROCESSING, payload: { processedTask, processMessage } })
throw new Error(
JSON.stringify({
status: "failed",
value: error.data.message ? error.data.message : error,
})
)
})
)
}
const addParticipantResults = await Promise.allSettled(PromiseArr)
PromiseArr 是 Promise 数组,长度为 100。
我是否可以将这个大请求拆分为小块 promise 数组并发送到后端,在每个请求间隙内,我可以发送另一个新请求,例如 retriveUserDetail?
【问题讨论】:
标签: javascript reactjs express concurrency promise