@@ -277,31 +277,28 @@ void PromiseWrap::getIsChainedPromise(Local<String> property,
277
277
info.Holder ()->GetInternalField (kIsChainedPromiseField ));
278
278
}
279
279
280
- static void PromiseHook (PromiseHookType type, Local<Promise> promise,
281
- Local<Value> parent, void * arg) {
282
- Environment* env = static_cast <Environment*>(arg);
280
+ static PromiseWrap* extractPromiseWrap (Local<Promise> promise) {
283
281
Local<Value> resource_object_value = promise->GetInternalField (0 );
284
- PromiseWrap* wrap = nullptr ;
285
282
if (resource_object_value->IsObject ()) {
286
- Local<Object> resource_object = resource_object_value.As <Object>();
287
- wrap = Unwrap<PromiseWrap>(resource_object);
283
+ return Unwrap<PromiseWrap>(resource_object_value.As <Object>());
288
284
}
285
+ return nullptr ;
286
+ }
289
287
288
+ static void PromiseHook (PromiseHookType type, Local<Promise> promise,
289
+ Local<Value> parent, void * arg) {
290
+ Environment* env = static_cast <Environment*>(arg);
291
+ PromiseWrap* wrap = extractPromiseWrap (promise);
290
292
if (type == PromiseHookType::kInit || wrap == nullptr ) {
291
293
bool silent = type != PromiseHookType::kInit ;
292
- PromiseWrap* parent_wrap = nullptr ;
293
294
294
295
// set parent promise's async Id as this promise's triggerAsyncId
295
296
if (parent->IsPromise ()) {
296
297
// parent promise exists, current promise
297
298
// is a chained promise, so we set parent promise's id as
298
299
// current promise's triggerAsyncId
299
300
Local<Promise> parent_promise = parent.As <Promise>();
300
- Local<Value> parent_resource = parent_promise->GetInternalField (0 );
301
- if (parent_resource->IsObject ()) {
302
- parent_wrap = Unwrap<PromiseWrap>(parent_resource.As <Object>());
303
- }
304
-
301
+ PromiseWrap* parent_wrap = extractPromiseWrap (parent_promise);
305
302
if (parent_wrap == nullptr ) {
306
303
parent_wrap = PromiseWrap::New (env, parent_promise, nullptr , true );
307
304
}
0 commit comments