diff options
author | Daniel Bevenius <daniel.bevenius@gmail.com> | 2018-03-13 14:03:27 +0300 |
---|---|---|
committer | Daniel Bevenius <daniel.bevenius@gmail.com> | 2018-03-16 10:02:33 +0300 |
commit | 69f8523d833466472ec262a55eeb9b18de809eb5 (patch) | |
tree | 89c0747755a6901a14a3d4bac501b0c15de1b1e8 /src | |
parent | 9a70b2725481ef17dc8a07d6e9d3dc9f72ad0907 (diff) |
src: add extractPromiseWrap function
Currently PromiseHook extracts the PromiseWrap from a Local<Promise> in
two places. This commit extracts that code into a function instead.
PR-URL: https://github.com/nodejs/node/pull/19340
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/async_wrap.cc | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/async_wrap.cc b/src/async_wrap.cc index 83882d9f805..599b4b8dcf9 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -275,19 +275,20 @@ void PromiseWrap::getIsChainedPromise(Local<String> property, info.Holder()->GetInternalField(kIsChainedPromiseField)); } -static void PromiseHook(PromiseHookType type, Local<Promise> promise, - Local<Value> parent, void* arg) { - Environment* env = static_cast<Environment*>(arg); +static PromiseWrap* extractPromiseWrap(Local<Promise> promise) { Local<Value> resource_object_value = promise->GetInternalField(0); - PromiseWrap* wrap = nullptr; if (resource_object_value->IsObject()) { - Local<Object> resource_object = resource_object_value.As<Object>(); - wrap = Unwrap<PromiseWrap>(resource_object); + return Unwrap<PromiseWrap>(resource_object_value.As<Object>()); } + return nullptr; +} +static void PromiseHook(PromiseHookType type, Local<Promise> promise, + Local<Value> parent, void* arg) { + Environment* env = static_cast<Environment*>(arg); + PromiseWrap* wrap = extractPromiseWrap(promise); if (type == PromiseHookType::kInit || wrap == nullptr) { bool silent = type != PromiseHookType::kInit; - PromiseWrap* parent_wrap = nullptr; // set parent promise's async Id as this promise's triggerAsyncId if (parent->IsPromise()) { @@ -295,11 +296,7 @@ static void PromiseHook(PromiseHookType type, Local<Promise> promise, // is a chained promise, so we set parent promise's id as // current promise's triggerAsyncId Local<Promise> parent_promise = parent.As<Promise>(); - Local<Value> parent_resource = parent_promise->GetInternalField(0); - if (parent_resource->IsObject()) { - parent_wrap = Unwrap<PromiseWrap>(parent_resource.As<Object>()); - } - + PromiseWrap* parent_wrap = extractPromiseWrap(parent_promise); if (parent_wrap == nullptr) { parent_wrap = PromiseWrap::New(env, parent_promise, nullptr, true); } |