diff --git a/src/async_wrap.cc b/src/async_wrap.cc index 6eddefedb3de8a..98bda0ac743a85 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -166,19 +166,25 @@ static void DestroyAsyncIdsCallback(void* arg) { } -void AsyncWrap::EmitPromiseResolve(Environment* env, double async_id) { +void Emit(Environment* env, double async_id, AsyncHooks::Fields type, + Local fn) { AsyncHooks* async_hooks = env->async_hooks(); - if (async_hooks->fields()[AsyncHooks::kPromiseResolve] == 0) + if (async_hooks->fields()[type] == 0) return; Local async_id_value = Number::New(env->isolate(), async_id); - Local fn = env->async_hooks_promise_resolve_function(); FatalTryCatch try_catch(env); USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value)); } +void AsyncWrap::EmitPromiseResolve(Environment* env, double async_id) { + Emit(env, async_id, AsyncHooks::kPromiseResolve, + env->async_hooks_promise_resolve_function()); +} + + void AsyncWrap::EmitTraceEventBefore() { switch (provider_type()) { #define V(PROVIDER) \ @@ -195,15 +201,8 @@ void AsyncWrap::EmitTraceEventBefore() { void AsyncWrap::EmitBefore(Environment* env, double async_id) { - AsyncHooks* async_hooks = env->async_hooks(); - - if (async_hooks->fields()[AsyncHooks::kBefore] == 0) - return; - - Local async_id_value = Number::New(env->isolate(), async_id); - Local fn = env->async_hooks_before_function(); - FatalTryCatch try_catch(env); - USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value)); + Emit(env, async_id, AsyncHooks::kBefore, + env->async_hooks_before_function()); } @@ -223,17 +222,10 @@ void AsyncWrap::EmitTraceEventAfter() { void AsyncWrap::EmitAfter(Environment* env, double async_id) { - AsyncHooks* async_hooks = env->async_hooks(); - - if (async_hooks->fields()[AsyncHooks::kAfter] == 0) - return; - // If the user's callback failed then the after() hooks will be called at the // end of _fatalException(). - Local async_id_value = Number::New(env->isolate(), async_id); - Local fn = env->async_hooks_after_function(); - FatalTryCatch try_catch(env); - USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value)); + Emit(env, async_id, AsyncHooks::kAfter, + env->async_hooks_after_function()); } class PromiseWrap : public AsyncWrap {