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

调用异步函数时直接返回与await返回两种写法有什么区别?

两种异步调用写法的对比结论

你的判断是正确的,没有额外处理逻辑的场景下第一种写法更优,具体差异如下:

语法规范层面

ECMAScript标准对两种写法都支持,没有强制约束,但行业通用实践遵循以下规则:

  • 仅做透传Promise、不需要在当前函数内处理异步结果/捕获异步错误的场景,优先使用无async/await的写法:
function addCustomer(session: Session, customer: Customer): Promise<Customer> {
  checkAccess('user', session);
  return doAddLocalObject('customer', customer);
}
  • 只有当你需要在当前函数内对doAddLocalObject的返回结果做二次处理,或者需要捕获它抛出的异步错误时,才需要使用async/await写法:
async function addCustomer(session: Session, customer: Customer): Promise<Customer> {
  checkAccess('user', session);
  try {
    const res = await doAddLocalObject('customer', customer);
    // 这里可以对res做额外处理
    return res;
  } catch (err) {
    // 这里可以做错误兜底、日志上报等操作
    console.error('添加客户失败', err);
    throw err;
  }
}

性能差异

两种写法存在可忽略但确实存在的性能差异,第一种写法性能更好:
async/await是Promise的语法糖,return await 会额外触发一层Promise的解包+重新包装操作,JS引擎需要多调度一次微任务来处理这个过程。而直接返回原Promise的写法是直接透传实例,没有额外开销,在高频调用场景下会有更明显的优势。

特殊注意事项

如果你的代码开启了ESLint的no-return-await规则,第二种写法会直接触发规则报错,该规则的设计初衷就是禁止没有必要的return await写法,减少不必要的性能开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:51:04