@@ -301,31 +301,28 @@ void PromiseWrap::getIsChainedPromise(Local<String> property,
301301 info.Holder ()->GetInternalField (kIsChainedPromiseField ));
302302}
303303
304- static void PromiseHook (PromiseHookType type, Local<Promise> promise,
305- Local<Value> parent, void * arg) {
306- Environment* env = static_cast <Environment*>(arg);
304+ static PromiseWrap* extractPromiseWrap (Local<Promise> promise) {
307305 Local<Value> resource_object_value = promise->GetInternalField (0 );
308- PromiseWrap* wrap = nullptr ;
309306 if (resource_object_value->IsObject ()) {
310- Local<Object> resource_object = resource_object_value.As <Object>();
311- wrap = Unwrap<PromiseWrap>(resource_object);
307+ return Unwrap<PromiseWrap>(resource_object_value.As <Object>());
312308 }
309+ return nullptr ;
310+ }
313311
312+ static void PromiseHook (PromiseHookType type, Local<Promise> promise,
313+ Local<Value> parent, void * arg) {
314+ Environment* env = static_cast <Environment*>(arg);
315+ PromiseWrap* wrap = extractPromiseWrap (promise);
314316 if (type == PromiseHookType::kInit || wrap == nullptr ) {
315317 bool silent = type != PromiseHookType::kInit ;
316- PromiseWrap* parent_wrap = nullptr ;
317318
318319 // set parent promise's async Id as this promise's triggerAsyncId
319320 if (parent->IsPromise ()) {
320321 // parent promise exists, current promise
321322 // is a chained promise, so we set parent promise's id as
322323 // current promise's triggerAsyncId
323324 Local<Promise> parent_promise = parent.As <Promise>();
324- Local<Value> parent_resource = parent_promise->GetInternalField (0 );
325- if (parent_resource->IsObject ()) {
326- parent_wrap = Unwrap<PromiseWrap>(parent_resource.As <Object>());
327- }
328-
325+ PromiseWrap* parent_wrap = extractPromiseWrap (parent_promise);
329326 if (parent_wrap == nullptr ) {
330327 parent_wrap = PromiseWrap::New (env, parent_promise, nullptr , true );
331328 }
0 commit comments