summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/bindings.rs2
-rw-r--r--core/runtime.rs10
2 files changed, 11 insertions, 1 deletions
diff --git a/core/bindings.rs b/core/bindings.rs
index 6fa9f745b..a93a3e746 100644
--- a/core/bindings.rs
+++ b/core/bindings.rs
@@ -363,6 +363,8 @@ pub extern "C" fn promise_reject_callback(message: v8::PromiseRejectMessage) {
}
}
+ // TODO(bartlomieju): remove this whole block, `js_uncaught_exception_cb` is
+ // not needed anymore
if let Some(exception) = tc_scope.exception() {
if let Some(js_uncaught_exception_cb) = js_uncaught_exception_cb {
tc_scope.reset(); // Cancel pending exception.
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);