@@ -189,7 +189,7 @@ function lookupPublicResource(resource) {
189189// Used by C++ to call all init() callbacks. Because some state can be setup
190190// from C++ there's no need to perform all the same operations as in
191191// emitInitScript.
192- function emitInitNative ( asyncId , type , triggerAsyncId , resource ) {
192+ function emitInitNative ( asyncId , type , triggerAsyncId , resource , isPromiseHook ) {
193193 active_hooks . call_depth += 1 ;
194194 resource = lookupPublicResource ( resource ) ;
195195 // Use a single try/catch for all hooks to avoid setting up one per iteration.
@@ -199,6 +199,10 @@ function emitInitNative(asyncId, type, triggerAsyncId, resource) {
199199 // eslint-disable-next-line no-var
200200 for ( var i = 0 ; i < active_hooks . array . length ; i ++ ) {
201201 if ( typeof active_hooks . array [ i ] [ init_symbol ] === 'function' ) {
202+ if ( isPromiseHook &&
203+ active_hooks . array [ i ] [ kNoPromiseHook ] ) {
204+ continue ;
205+ }
202206 active_hooks . array [ i ] [ init_symbol ] (
203207 asyncId , type , triggerAsyncId ,
204208 resource ,
@@ -222,7 +226,7 @@ function emitInitNative(asyncId, type, triggerAsyncId, resource) {
222226
223227// Called from native. The asyncId stack handling is taken care of there
224228// before this is called.
225- function emitHook ( symbol , asyncId ) {
229+ function emitHook ( symbol , asyncId , isPromiseHook ) {
226230 active_hooks . call_depth += 1 ;
227231 // Use a single try/catch for all hook to avoid setting up one per
228232 // iteration.
@@ -232,6 +236,10 @@ function emitHook(symbol, asyncId) {
232236 // eslint-disable-next-line no-var
233237 for ( var i = 0 ; i < active_hooks . array . length ; i ++ ) {
234238 if ( typeof active_hooks . array [ i ] [ symbol ] === 'function' ) {
239+ if ( isPromiseHook &&
240+ active_hooks . array [ i ] [ kNoPromiseHook ] ) {
241+ continue ;
242+ }
235243 active_hooks . array [ i ] [ symbol ] ( asyncId ) ;
236244 }
237245 }
@@ -321,7 +329,7 @@ function promiseInitHook(promise, parent) {
321329 trackPromise ( promise , parent ) ;
322330 const asyncId = promise [ async_id_symbol ] ;
323331 const triggerAsyncId = promise [ trigger_async_id_symbol ] ;
324- emitInitScript ( asyncId , 'PROMISE' , triggerAsyncId , promise ) ;
332+ emitInitScript ( asyncId , 'PROMISE' , triggerAsyncId , promise , true ) ;
325333}
326334
327335function promiseInitHookWithDestroyTracking ( promise , parent ) {
@@ -339,14 +347,14 @@ function promiseBeforeHook(promise) {
339347 trackPromise ( promise ) ;
340348 const asyncId = promise [ async_id_symbol ] ;
341349 const triggerId = promise [ trigger_async_id_symbol ] ;
342- emitBeforeScript ( asyncId , triggerId , promise ) ;
350+ emitBeforeScript ( asyncId , triggerId , promise , true ) ;
343351}
344352
345353function promiseAfterHook ( promise ) {
346354 trackPromise ( promise ) ;
347355 const asyncId = promise [ async_id_symbol ] ;
348356 if ( hasHooks ( kAfter ) ) {
349- emitAfterNative ( asyncId ) ;
357+ emitAfterNative ( asyncId , true ) ;
350358 }
351359 if ( asyncId === executionAsyncId ( ) ) {
352360 // This condition might not be true if async_hooks was enabled during
@@ -361,7 +369,7 @@ function promiseAfterHook(promise) {
361369function promiseResolveHook ( promise ) {
362370 trackPromise ( promise ) ;
363371 const asyncId = promise [ async_id_symbol ] ;
364- emitPromiseResolveNative ( asyncId ) ;
372+ emitPromiseResolveNative ( asyncId , true ) ;
365373}
366374
367375let wantPromiseHook = false ;
@@ -492,7 +500,7 @@ function promiseResolveHooksExist() {
492500}
493501
494502
495- function emitInitScript ( asyncId , type , triggerAsyncId , resource ) {
503+ function emitInitScript ( asyncId , type , triggerAsyncId , resource , isPromiseHook = false ) {
496504 // Short circuit all checks for the common case. Which is that no hooks have
497505 // been set. Do this to remove performance impact for embedders (and core).
498506 if ( ! hasHooks ( kInit ) )
@@ -502,15 +510,15 @@ function emitInitScript(asyncId, type, triggerAsyncId, resource) {
502510 triggerAsyncId = getDefaultTriggerAsyncId ( ) ;
503511 }
504512
505- emitInitNative ( asyncId , type , triggerAsyncId , resource ) ;
513+ emitInitNative ( asyncId , type , triggerAsyncId , resource , isPromiseHook ) ;
506514}
507515
508516
509- function emitBeforeScript ( asyncId , triggerAsyncId , resource ) {
517+ function emitBeforeScript ( asyncId , triggerAsyncId , resource , isPromiseHook = false ) {
510518 pushAsyncContext ( asyncId , triggerAsyncId , resource ) ;
511519
512520 if ( hasHooks ( kBefore ) )
513- emitBeforeNative ( asyncId ) ;
521+ emitBeforeNative ( asyncId , isPromiseHook ) ;
514522}
515523
516524
0 commit comments