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

React Native for Windows原生模块异常无法被全局捕获该如何处理

React Native for Windows原生模块默认不会把执行时抛出的异常冒泡到应用全局的App.UnhandledException和TaskScheduler.UnobservedTaskException管道,原生层会默认捕获异常并传递到JS层,你可以通过以下几种方式实现异常捕获:


方案1:原生模块内显式捕获处理(最推荐)

直接在原生方法内加try-catch逻辑,既可以本地记录异常,也可以将异常回传给JS层处理。
修改后的CustomModule.cs代码:

using Microsoft.ReactNative.Managed;
using System;
using System.Diagnostics;

namespace testprojecthandlederrors
{
    [ReactModule]
    class CustomModule
    {
        [ReactMethod("saveImage")]
        public void SaveImage(string base64, IReactPromise<string> promise)
        {
            try
            {
                // 原有业务逻辑
                var base64String = base64.Replace("data:image/png;base64,", string.Empty);
                promise.Resolve("处理成功");
            }
            catch (Exception ex)
            {
                // 本地记录异常日志
                Debug.WriteLine($"原生模块异常:{ex.Message}");
                // 将异常传递到JS层处理
                promise.Reject(new ReactError { Message = ex.Message, Code = "NATIVE_ERROR" });
            }
        }
    }
}

对应App.js的调用逻辑调整:

...
const testException = async () => {
  try {
    await NativeModules.CustomModule.saveImage();
  } catch (e) {
    console.log('捕获到原生模块异常:', e);
  }
}
...

方案2:全局拦截所有原生模块异常

如果不想给每个原生方法单独加捕获逻辑,可以注册React Native实例的全局异常回调,统一处理所有原生模块异常。
在App.xaml.cs的构造函数中新增如下代码:

InstanceSettings.OnInstanceCreated += (sender, instance) =>
{
    instance.NativeModuleException += (s, e) =>
    {
        // 统一捕获所有原生模块抛出的未处理异常
        Debug.WriteLine($"全局捕获原生模块异常:{e.Exception.Message},所属模块:{e.ModuleName},调用方法:{e.MethodName}");
        // 如果需要让异常继续冒泡到你之前注册的App_UnhandledException,将e.Handled设为false即可,默认值为true
        e.Handled = false;
    };
};

方案3:处理异步Task未观测异常

如果你的原生模块内存在未被await的异步Task抛出的异常,除了原有TaskScheduler.UnobservedTaskException注册逻辑外,还需要在项目的.csproj配置文件的PropertyGroup节点中新增配置,开启未观测异常上报:

<ThrowUnobservedTaskExceptions>true</ThrowUnobservedTaskExceptions>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:48:01