You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历多个HTTP请求并等待循环结束后再解析Promise?

问题分析与解决方案

我来帮你拆解下当前代码的问题,然后给出针对性的修复方案:

问题根源

你的代码里有两个核心问题导致Promise提前resolve:

  1. map 不等待异步操作:questionArr.map() 只是遍历数组并返回新的数组,但它不会等待每个回调里的异步请求完成。你虽然在Promise构造函数里加了async,但并没有实际等待这些请求结束。
  2. 没有等待globalApi.post完成:globalApi.post是异步操作,你没有用await它,所以这些请求会在后台默默执行,而你的代码直接跳到了resolve(true)。

修复方案

我们需要确保所有异步请求都完成后再resolve Promise,这里有两种简洁的实现方式:

方式1:修正原Promise写法

export const sendQuestionArray = (questionArr) => {
  return new Promise(async(resolve, reject) => {
    try {
      // 收集所有请求的Promise,用Promise.all等待全部完成
      await Promise.all(questionArr.map(async(question) => {
        const formSend = new FormData()
        formSend.append('idAsignacion', question.question_id)
        formSend.append('pregunta', question.question)
        formSend.append('respuesta', question.value ? 'CUMPLE' : 'NO_CUMPLE')
        formSend.append('imagenes', JSON.stringify(question.photo))
        formSend.append('comments', question.comments)
        // 等待当前请求完成
        await globalApi.post('/api-agv/audit/set_answer_audit', formSend)
      }))
      // 所有请求都成功完成后再resolve
      resolve(true)
    } catch (error) {
      // 捕获任何请求失败的错误,传递给调用方
      reject(error)
    }
  })
}

方式2:简化为async函数(更推荐)

因为async函数本身就会返回Promise,所以不需要手动创建new Promise,代码会更简洁易读:

export const sendQuestionArray = async(questionArr) => {
  try {
    // 等待所有请求全部完成
    await Promise.all(questionArr.map(async(question) => {
      const formSend = new FormData()
      formSend.append('idAsignacion', question.question_id)
      formSend.append('pregunta', question.question)
      formSend.append('respuesta', question.value ? 'CUMPLE' : 'NO_CUMPLE')
      formSend.append('imagenes', JSON.stringify(question.photo))
      formSend.append('comments', question.comments)
      await globalApi.post('/api-agv/audit/set_answer_audit', formSend)
    }))
    // 所有请求成功后返回true
    return true
  } catch (error) {
    // 抛出错误,让调用方可以通过try/catch处理
    throw error
  }
}

关键说明

  • Promise.all的作用:它会接收一个Promise数组,等待数组中所有Promise都成功resolve后才会继续执行;如果有任何一个Promise reject,它会立即抛出错误。
  • 每个map回调加async/await:确保每个globalApi.post请求都完成后,才会生成对应的Promise结果。
  • 错误处理:通过try/catch捕获请求过程中的错误,避免某个请求失败导致整个流程无响应,同时把错误传递给调用方处理。

内容的提问来源于stack exchange,提问作者Gario3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:07:44