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

使用Promises遇each then()需返回值或抛出异常报错的原因咨询

解决Promise报错:Each then() should return a value or throw

嘿,这个报错我太熟了!其实它是ESLint这类代码质量检测工具给你的规范提醒,核心问题出在你的then()回调函数里没有返回值(也没有抛出错误),导致Promise链出现了“断层”,工具会认为这大概率是你的疏忽,可能引发潜在的逻辑问题。

为什么会出现这个报错?

ESLint的promise/always-return规则(类似的代码检测规则)要求:每个then()的回调函数必须满足以下两个条件之一:

  • 返回一个值(可以是普通值、另一个Promise,甚至undefined)
  • 抛出一个错误(用于在Promise链中传递异常)

举个典型的错误示例,你可能写了这样的代码:

// 错误写法:then回调没有返回值
Promise.all([asyncFunc1(), asyncFunc2()])
  .then(results => {
    // 处理结果,但完全没写return
    console.log("执行完成:", results);
  })
  .catch(err => {
    console.error("出错了:", err);
  });

这里的then()回调只做了打印操作,没有返回任何内容,代码检测工具就会抛出那个报错。

怎么修复这个问题?

根据你的业务需求,有几种常见的修复方式:

1. 不需要继续Promise链?明确返回值

如果这个then()是Promise链的最后一步,直接加个return(或者返回具体值)即可:

Promise.all([asyncFunc1(), asyncFunc2()])
  .then(results => {
    console.log("执行完成:", results);
    return; // 明确返回,或者返回你需要的值比如return results;
  })
  .catch(err => {
    console.error("出错了:", err);
    throw err; // 若需要把错误向上传递,就抛出;不需要的话也可以return
  });

2. 需要继续链式调用?返回后续逻辑的结果

如果后面还要接着用then()处理,就返回你的处理结果或者新的Promise:

Promise.all([asyncFunc1(), asyncFunc2()])
  .then(results => {
    // 处理结果后返回新的值/Promise
    return processResults(results);
  })
  .then(processedData => {
    return sendResponse(processedData); // 继续链式调用
  })
  .catch(err => {
    console.error("出错了:", err);
    throw err;
  });

3. 换用async/await语法(更直观,不易出错)

如果你的运行环境支持ES2017+,async/await写法能避免这类链式回调的问题,代码可读性也更高:

async function handleRequest() {
  try {
    // 等待所有异步方法完成
    const results = await Promise.all([asyncFunc1(), asyncFunc2()]);
    console.log("执行完成:", results);
    // 这里的return会作为函数Promise的结果返回
    return processResults(results);
  } catch (err) {
    console.error("出错了:", err);
    throw err; // 向上抛出错误
  }
}

总结

这个报错不是JavaScript本身的语法错误,而是代码质量工具帮你提前规避潜在问题——比如不小心遗漏了返回值,导致后续Promise链无法获取正确的结果。只要确保每个then()回调要么返回值,要么抛出错误,就能轻松解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:52:27