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

iOS端RN v0.7x中catch含return时JS控制台输出异常问题

React Native v0.7x iOS环境下try/catch/finally控制台输出异常问题解析

环境:iOS系统,React Native v0.7x(v0.6x无此问题)

问题现象

以下代码执行后,finally块中的console.log输出的是error而非预期的[1]:

const loading = [1];
console.log('====before catch', loading);
try {
  await Promise.reject(new Error('error'));
} catch (e) {
  return false;
} finally {
  console.log('====finally', loading);
}

但以下两段代码的控制台输出均正常(finally块打印出[1]):
代码1:

const loading = [1];
try {
  await Promise.reject(new Error('error'));
} catch (e) {
  return false;
} finally {
  console.log('====finally', loading);
}

代码2:

const loading = [1];
try {
  await Promise.reject(new Error('error'));
} catch (e) {
  // return false;
} finally {
  console.log('====finally', loading);
}

原因分析

这是React Native v0.7x针对iOS平台的控制台输出渲染bug:

  • 当在async函数的catch块中执行return语句时,控制台的变量追踪逻辑出现异常,会将finally块中打印的变量错误替换为catch捕获的异常对象。
  • 第一段代码中,catch前的console.log触发了控制台对loading变量的追踪,后续catch块的return语句触发了bug,导致finally中打印的loading被异常对象覆盖。
  • 第二段代码去掉了catch前的console.log,控制台未对loading进行追踪,因此未触发bug。
  • 第三段代码注释掉了catch块中的return语句,不满足bug的触发条件,所以输出正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:27:41