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

如何为返回axios.request的函数封装Promise,仅在特定条件下resolve

实现带条件resolve的Promise包装axios请求

方法一:外层嵌套新Promise

直接在外层创建新Promise,完全掌控resolve和reject的触发时机:

function myFn() {
  return new Promise((resolve, reject) => {
    axios.request({ /* 填入你的请求配置,比如url、method等 */ })
      .then(response => {
        // 请求成功后判断返回的状态值
        if (response.data.status === "somevalue") {
          resolve(response.data); // 满足条件时resolve,可按需传递数据
        } else {
          // 状态不符时触发reject,自定义错误信息
          reject(new Error(`返回状态不符合预期,当前状态: ${response.data.status}`));
        }
      })
      .catch(requestError => {
        // 捕获axios请求本身的错误(如网络异常、HTTP错误码等)
        reject(requestError);
      });
  });
}

方法二:利用Promise链式调用简化写法

无需额外嵌套Promise,直接在axios返回的Promise链中做判断:

function myFn() {
  return axios.request({ /* 你的请求配置 */ })
    .then(response => {
      if (response.data.status === "somevalue") {
        return response.data; // 满足条件时返回数据,会传递给后续的then
      } else {
        // 状态不符时抛出错误,会进入后续的catch分支
        throw new Error(`状态不符合预期: ${response.data.status}`);
      }
    });
}

使用方式

两种方法的调用逻辑完全一致:

myFn()
  .then(validData => {
    // 只有当返回状态为"somevalue"时才会进入这里
    console.log("处理符合条件的数据:", validData);
  })
  .catch(error => {
    // 处理请求失败或状态不符的情况
    console.error("出错了:", error.message);
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:18:14