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

如何在下层函数中捕获上层函数抛出的JavaScript异步错误

错误无法捕获的根本原因
  • try/catch 只能捕获同步执行栈内抛出的异常,FetchSomeThing() 是异步Promise接口,它的运行错误属于异步微任务错误,不在 lowerFn 的同步执行栈范围内,因此原生同步try/catch无法直接捕获。
  • 原代码中upperFn没有返回内部的Promise对象,外部无法感知到异步任务的运行状态。
  • upperFn内部的.catch已经把错误消化处理,没有重新抛出的情况下,错误不会向上层传递。
修复方案

需要同时修改两个函数的实现:

  1. 让upperFn返回内部的Promise对象,如果需要在内部先处理错误,处理完成后要重新抛出错误
  2. lowerFn使用async/await语法等待异步任务执行,配合try/catch捕获异步错误

实现代码示例

// upperFn 调整
function upperFn(){
    return FetchSomeThing() 
    .catch(err => { 
        // 可在此处先做upper层的通用错误处理
        console.log('upperFn 捕获到原始错误:', err)
        // 重新抛出错误,才能传递到上层
        throw err
    })
}

// lowerFn 调整为async函数,配合await使用
async function lowerFn(){
    try {
        await upperFn()
    }
    catch (err){
        // 此处可正常捕获到错误
        console.log('lowerFn 捕获到传递的错误:', err)
    }
}

如果不需要在upperFn内提前处理错误,直接返回FetchSomeThing()即可,不需要写内部的.catch逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:15:06