diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-07-23 00:40:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-23 00:40:42 +0200 |
commit | 504d2936ecf1a5520ca20f83792a94b219e84f53 (patch) | |
tree | f4d23c520355f340374529d67b31657821e73163 /core/runtime.rs | |
parent | 72199303d899b8ddf2ff46ed11bd513ed9cc47e2 (diff) |
fix: unhandledrejection handling for sync throw in top level (#15279)
Fixes an edge in "unhandledrejection" event that prevent synchronous
errors being surfaced when throw from a top-level scope.
Diffstat (limited to 'core/runtime.rs')
-rw-r--r-- | core/runtime.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/core/runtime.rs b/core/runtime.rs index 64e7f635c..4568f2018 100644 --- a/core/runtime.rs +++ b/core/runtime.rs @@ -1335,7 +1335,15 @@ impl JsRuntime { .expect("Expected to get promise as module evaluation result"); let promise_global = v8::Global::new(tc_scope, promise); let mut state = state_rc.borrow_mut(); - state.pending_promise_exceptions.remove(&promise_global); + { + let pending_mod_evaluate = state.pending_mod_evaluate.as_ref().unwrap(); + let pending_rejection_was_already_handled = pending_mod_evaluate + .handled_promise_rejections + .contains(&promise_global); + if !pending_rejection_was_already_handled { + state.pending_promise_exceptions.remove(&promise_global); + } + } let promise_global = v8::Global::new(tc_scope, promise); state.pending_mod_evaluate.as_mut().unwrap().promise = Some(promise_global); |