src: refactor emit before/after/promiseResolve
Currently EmitBefore, EmitAfter, EmitPromiseResolve are very similar. This commit suggests extracting the code they have in common to a new function to reduce code duplication. PR-URL: https://github.com/nodejs/node/pull/19295 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
90b0538273
commit
861285abb5
@ -162,19 +162,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<Function> fn) {
|
||||||
AsyncHooks* async_hooks = env->async_hooks();
|
AsyncHooks* async_hooks = env->async_hooks();
|
||||||
|
|
||||||
if (async_hooks->fields()[AsyncHooks::kPromiseResolve] == 0)
|
if (async_hooks->fields()[type] == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Local<Value> async_id_value = Number::New(env->isolate(), async_id);
|
Local<Value> async_id_value = Number::New(env->isolate(), async_id);
|
||||||
Local<Function> fn = env->async_hooks_promise_resolve_function();
|
|
||||||
FatalTryCatch try_catch(env);
|
FatalTryCatch try_catch(env);
|
||||||
USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value));
|
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() {
|
void AsyncWrap::EmitTraceEventBefore() {
|
||||||
switch (provider_type()) {
|
switch (provider_type()) {
|
||||||
#define V(PROVIDER) \
|
#define V(PROVIDER) \
|
||||||
@ -192,15 +198,8 @@ void AsyncWrap::EmitTraceEventBefore() {
|
|||||||
|
|
||||||
|
|
||||||
void AsyncWrap::EmitBefore(Environment* env, double async_id) {
|
void AsyncWrap::EmitBefore(Environment* env, double async_id) {
|
||||||
AsyncHooks* async_hooks = env->async_hooks();
|
Emit(env, async_id, AsyncHooks::kBefore,
|
||||||
|
env->async_hooks_before_function());
|
||||||
if (async_hooks->fields()[AsyncHooks::kBefore] == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Local<Value> async_id_value = Number::New(env->isolate(), async_id);
|
|
||||||
Local<Function> fn = env->async_hooks_before_function();
|
|
||||||
FatalTryCatch try_catch(env);
|
|
||||||
USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -221,17 +220,10 @@ void AsyncWrap::EmitTraceEventAfter() {
|
|||||||
|
|
||||||
|
|
||||||
void AsyncWrap::EmitAfter(Environment* env, double async_id) {
|
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
|
// If the user's callback failed then the after() hooks will be called at the
|
||||||
// end of _fatalException().
|
// end of _fatalException().
|
||||||
Local<Value> async_id_value = Number::New(env->isolate(), async_id);
|
Emit(env, async_id, AsyncHooks::kAfter,
|
||||||
Local<Function> fn = env->async_hooks_after_function();
|
env->async_hooks_after_function());
|
||||||
FatalTryCatch try_catch(env);
|
|
||||||
USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class PromiseWrap : public AsyncWrap {
|
class PromiseWrap : public AsyncWrap {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user