diff options
Diffstat (limited to 'core/bindings.rs')
-rw-r--r-- | core/bindings.rs | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/core/bindings.rs b/core/bindings.rs index 96225e4cd..bf0da18e4 100644 --- a/core/bindings.rs +++ b/core/bindings.rs @@ -455,10 +455,12 @@ pub extern "C" fn promise_reject_callback(message: v8::PromiseRejectMessage) { let scope = &mut unsafe { v8::CallbackScope::new(&message) }; let context_state_rc = JsRealm::state_from_scope(scope); + let mut context_state = context_state_rc.borrow_mut(); + + if let Some(js_promise_reject_cb) = context_state.js_promise_reject_cb.clone() + { + drop(context_state); - let promise_reject_cb = - context_state_rc.borrow().js_promise_reject_cb.clone(); - if let Some(js_promise_reject_cb) = promise_reject_cb { let tc_scope = &mut v8::TryCatch::new(scope); let undefined: v8::Local<v8::Value> = v8::undefined(tc_scope).into(); let type_ = v8::Integer::new(tc_scope, message.get_event() as i32); @@ -496,20 +498,20 @@ pub extern "C" fn promise_reject_callback(message: v8::PromiseRejectMessage) { } } } else { - let state_rc = JsRuntime::state(scope); - let mut state = state_rc.borrow_mut(); let promise = message.get_promise(); let promise_global = v8::Global::new(scope, promise); match message.get_event() { PromiseRejectWithNoHandler => { let error = message.get_value().unwrap(); let error_global = v8::Global::new(scope, error); - state + context_state .pending_promise_rejections .insert(promise_global, error_global); } PromiseHandlerAddedAfterReject => { - state.pending_promise_rejections.remove(&promise_global); + context_state + .pending_promise_rejections + .remove(&promise_global); } PromiseRejectAfterResolved => {} PromiseResolveAfterResolved => { |