@@ -301,31 +301,28 @@ void PromiseWrap::getIsChainedPromise(Local<String> property,
301
301
info.Holder ()->GetInternalField (kIsChainedPromiseField ));
302
302
}
303
303
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) {
307
305
Local<Value> resource_object_value = promise->GetInternalField (0 );
308
- PromiseWrap* wrap = nullptr ;
309
306
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>());
312
308
}
309
+ return nullptr ;
310
+ }
313
311
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);
314
316
if (type == PromiseHookType::kInit || wrap == nullptr ) {
315
317
bool silent = type != PromiseHookType::kInit ;
316
- PromiseWrap* parent_wrap = nullptr ;
317
318
318
319
// set parent promise's async Id as this promise's triggerAsyncId
319
320
if (parent->IsPromise ()) {
320
321
// parent promise exists, current promise
321
322
// is a chained promise, so we set parent promise's id as
322
323
// current promise's triggerAsyncId
323
324
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);
329
326
if (parent_wrap == nullptr ) {
330
327
parent_wrap = PromiseWrap::New (env, parent_promise, nullptr , true );
331
328
}
0 commit comments