diff --git a/src/async-wrap.cc b/src/async-wrap.cc index c9f5caad1e4ea8..29ea139f5f91c0 100644 --- a/src/async-wrap.cc +++ b/src/async-wrap.cc @@ -207,25 +207,22 @@ Local AsyncWrap::MakeCallback(const Local cb, } if (ran_init_callback() && !pre_fn.IsEmpty()) { - try_catch.SetVerbose(false); pre_fn->Call(context, 0, nullptr); if (try_catch.HasCaught()) FatalError("node::AsyncWrap::MakeCallback", "pre hook threw"); - try_catch.SetVerbose(true); } Local ret = cb->Call(context, argc, argv); - if (try_catch.HasCaught()) { - return Undefined(env()->isolate()); - } - if (ran_init_callback() && !post_fn.IsEmpty()) { - try_catch.SetVerbose(false); post_fn->Call(context, 0, nullptr); if (try_catch.HasCaught()) FatalError("node::AsyncWrap::MakeCallback", "post hook threw"); - try_catch.SetVerbose(true); + } + + // If the return value is empty then the callback threw. + if (ret.IsEmpty()) { + return Undefined(env()->isolate()); } if (has_domain) { diff --git a/src/node.cc b/src/node.cc index 8264bfe8bba8a3..b048166cd9d8df 100644 --- a/src/node.cc +++ b/src/node.cc @@ -1165,21 +1165,22 @@ Local MakeCallback(Environment* env, } if (ran_init_callback && !pre_fn.IsEmpty()) { - try_catch.SetVerbose(false); pre_fn->Call(object, 0, nullptr); if (try_catch.HasCaught()) FatalError("node::MakeCallback", "pre hook threw"); - try_catch.SetVerbose(true); } Local ret = callback->Call(recv, argc, argv); if (ran_init_callback && !post_fn.IsEmpty()) { - try_catch.SetVerbose(false); post_fn->Call(object, 0, nullptr); if (try_catch.HasCaught()) FatalError("node::MakeCallback", "post hook threw"); - try_catch.SetVerbose(true); + } + + // If the return value is empty then the callback threw. + if (ret.IsEmpty()) { + return Undefined(env->isolate()); } if (has_domain) { @@ -1191,10 +1192,6 @@ Local MakeCallback(Environment* env, } } - if (try_catch.HasCaught()) { - return Undefined(env->isolate()); - } - if (!env->KickNextTick()) return Undefined(env->isolate());