diff options
Diffstat (limited to 'src/async_wrap-inl.h')
-rw-r--r-- | src/async_wrap-inl.h | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/async_wrap-inl.h b/src/async_wrap-inl.h index 5763b17aa0..4405bb3a9b 100644 --- a/src/async_wrap-inl.h +++ b/src/async_wrap-inl.h @@ -81,18 +81,14 @@ inline v8::MaybeLocal<v8::Value> AsyncWrap::MakeCallback( const v8::Local<v8::Name> symbol, int argc, v8::Local<v8::Value>* argv) { - v8::Local<v8::Value> cb_v = object()->Get(symbol); - CHECK(cb_v->IsFunction()); - return MakeCallback(cb_v.As<v8::Function>(), argc, argv); -} - - -inline v8::MaybeLocal<v8::Value> AsyncWrap::MakeCallback( - uint32_t index, - int argc, - v8::Local<v8::Value>* argv) { - v8::Local<v8::Value> cb_v = object()->Get(index); - CHECK(cb_v->IsFunction()); + v8::Local<v8::Value> cb_v; + if (!object()->Get(env()->context(), symbol).ToLocal(&cb_v)) + return v8::MaybeLocal<v8::Value>(); + if (!cb_v->IsFunction()) { + // TODO(addaleax): We should throw an error here to fulfill the + // `MaybeLocal<>` API contract. + return v8::MaybeLocal<v8::Value>(); + } return MakeCallback(cb_v.As<v8::Function>(), argc, argv); } |