Uncaught Promises Not Logged / Logbox not visible
Minimal reproducible example
https://github.com/robgraeber/rn-test
What platform(s) does this occur on?
iOS
Where did you reproduce the issue?
in Expo Go
Summary
It seems like Expo is not logging uncaught promises, any uncaught errors in an async function fail silently. I've tracked it down to here: https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/promiseRejectionTrackingOptions.js#L48. console.warn() can successfully log and display a logbox if I edit the code there but LogBox.addLog() seems to do nothing.
For the reproduction example, it's using the base create-expo-app with a simple button with an async onPress: https://github.com/robgraeber/rn-test/blob/main/app/(tabs)/index.tsx#L25
Environment
expo-env-info 1.2.2 environment info:
System:
OS: macOS 15.1
Shell: 3.6.0 - /usr/local/bin/fish
Binaries:
Node: 22.11.0 - /usr/local/bin/node
Yarn: 1.22.19 - ~/.yarn/bin/yarn
npm: 10.9.0 - /usr/local/bin/npm
Watchman: 2025.04.07.00 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.10.2 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 24.2, iOS 18.2, macOS 15.2, tvOS 18.2, visionOS 2.2, watchOS 11.2
IDEs:
Android Studio: 2022.1 AI-221.6008.13.2211.9514443
Xcode: 16.2/16C5032a - /usr/bin/xcodebuild
npmPackages:
expo: ~52.0.46 => 52.0.46
expo-router: ~4.0.20 => 4.0.20
react: 18.3.1 => 18.3.1
react-dom: 18.3.1 => 18.3.1
react-native: 0.76.9 => 0.76.9
react-native-web: ~0.19.13 => 0.19.13
npmGlobalPackages:
eas-cli: 16.0.0
expo-cli: 6.3.12
Expo Workflow: managed
Expo Doctor Diagnostics
15/15 checks passed. No issues detected!
This happens because errors thrown in asynchronous functions (async) inside React Native callbacks are not caught by the same global error mechanism as synchronous errors. The error thrown in the asynchronous onPress is "lost" and does not appear in the console.
To catch and log errors in asynchronous functions, use try/catch inside the callback. Example:
<TouchableOpacity
onPress={async () => {
try {
throw new Error("test error");
} catch (e) {
console.error(e);
}
}}
>
<Text style={{ color: "white" }}>THROW ERROR (ASYNC)</Text>
</TouchableOpacity>;
This way, the error will be logged correctly in the console.
I could be wrong 😅 but work haha
@mensonones I believe it is meant to log uncaught errors, that's what https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/promiseRejectionTrackingOptions.js#L48 is for. In fact it does work in that code if it used a simple console.warn instead of logbox directly for some reason.
@robgraeber - can you reproduce this in sdk 53? if you run the identical code in a blank app created with npx @react-native-community/cli init can you repro?
- created a repro (sdk 53,
npx create-expo-app@latest) - added 3 lines to throw async error
- async error is silent, isn't logged in console, logbox, adb, react-native devtools https://github.com/asaf-s-lumen/expo-minimal-repro__unlogged-async-errors