Add non-fatal error handling

Summary:
## Changelog:

[Internal][Added] - Additional option to report non-fatal JS error

Reviewed By: ejanzer

Differential Revision: D22054406

fbshipit-source-id: 25e2a8d45f086173b09ee095331f94364cae4c1a
This commit is contained in:
Luna Wei
2020-06-18 16:58:21 -07:00
committed by Facebook GitHub Bot
parent 64860972be
commit 568d2206f7
2 changed files with 17 additions and 8 deletions
+16 -7
View File
@@ -10,12 +10,12 @@
namespace facebook {
namespace react {
inline static void handleJSError(
jsi::Runtime &runtime,
const jsi::JSError &error) {
inline static void
handleJSError(jsi::Runtime &runtime, const jsi::JSError &error, bool isFatal) {
auto errorUtils = runtime.global().getProperty(runtime, "ErrorUtils");
if (errorUtils.isUndefined() || !errorUtils.isObject() ||
!errorUtils.getObject(runtime).hasProperty(runtime, "reportFatalError")) {
!errorUtils.getObject(runtime).hasProperty(runtime, "reportFatalError") ||
!errorUtils.getObject(runtime).hasProperty(runtime, "reportError")) {
// ErrorUtils was not set up. This probably means the bundle didn't
// load properly.
throw jsi::JSError(
@@ -24,11 +24,20 @@ inline static void handleJSError(
error.getMessage(),
error.getStack());
}
// TODO(janzer): Rewrite this function to return the processed error
// instead of just reporting it through the native module
auto func = errorUtils.asObject(runtime).getPropertyAsFunction(
runtime, "reportFatalError");
func.call(runtime, error.value(), jsi::Value(true));
if (isFatal) {
auto func = errorUtils.asObject(runtime).getPropertyAsFunction(
runtime, "reportFatalError");
func.call(runtime, error.value());
} else {
auto func = errorUtils.asObject(runtime).getPropertyAsFunction(
runtime, "reportError");
func.call(runtime, error.value());
}
}
} // namespace react
+1 -1
View File
@@ -354,7 +354,7 @@ RuntimeExecutor NativeToJsBridge::getRuntimeExecutor() {
try {
callback(*runtime);
} catch (jsi::JSError &originalError) {
handleJSError(*runtime, originalError);
handleJSError(*runtime, originalError, true);
}
});
};