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

如何正确使用Promise发送POST请求?请求耗时过长问题排查

问题分析与代码修正

代码里的核心问题

  • 冗余Promise嵌套:async函数本身就会返回Promise,没必要再外层包裹new Promise,徒增复杂度还容易出问题。
  • 强制5秒延迟:代码里的setTimeout直接让请求等待5秒才执行,这是耗时过长的直接原因,除非业务必须延迟,否则必须移除。
  • 无效逻辑:return await axios(config)之后的console.log(result)和resolve(result)永远不会执行,而且result是空对象,完全没用。
  • 手动设置请求头风险:axios可以自动处理FormData的Content-Type(包括boundary)和Content-Length,手动计算长度很容易出错,可能导致请求异常。
  • 无错误处理:没捕获axios请求的异常,一旦请求失败,Promise会一直处于pending状态,无法处理错误。

修正后的代码

exports.updatePostApi = async (datas) => {
  const api = "user/update?_method=PUT";
  const data = new FormData();
  data.append("userbody", JSON.stringify(datas));
  
  // 可选:保留长度日志,但无需手动设置到请求头
  console.log(data._valueLength + data._overheadLength + 56, "length");

  const config = {
    method: "post",
    baseURL: apiEndpoint,
    url: api,
    data: data,
    headers: {
      "BIR-Authorization": Authorization,
      // 移除手动设置的Content-Type和Content-Length,交给axios自动处理
    },
    maxBodyLength: Infinity,
    maxContentLength: Infinity,
  };

  try {
    const result = await axios(config);
    console.log(result);
    return result;
  } catch (error) {
    console.error("请求失败:", error);
    throw error;
  }
};

修正说明

  1. 去掉了多余的Promise嵌套和setTimeout延迟,直接在async函数内处理逻辑,消除了无意义的等待时间。
  2. 让axios自动处理FormData的请求头,避免手动计算长度带来的错误。
  3. 添加try/catch捕获请求异常,确保错误能被调用方捕获处理。
  4. 直接返回axios的响应结果,async函数会自动将其包装为resolved状态的Promise,无需手动调用resolve。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:35:35