@@ -71,10 +71,18 @@ function processTicksAndRejections() {
71
71
72
72
try {
73
73
const callback = tock . callback ;
74
- if ( tock . args === undefined )
74
+ if ( tock . args === undefined ) {
75
75
callback ( ) ;
76
- else
77
- callback ( ...tock . args ) ;
76
+ } else {
77
+ const args = tock . args ;
78
+ switch ( args . length ) {
79
+ case 1 : callback ( args [ 0 ] ) ; break ;
80
+ case 2 : callback ( args [ 0 ] , args [ 1 ] ) ; break ;
81
+ case 3 : callback ( args [ 0 ] , args [ 1 ] , args [ 2 ] ) ; break ;
82
+ case 4 : callback ( args [ 0 ] , args [ 1 ] , args [ 2 ] , args [ 3 ] ) ; break ;
83
+ default : callback ( ...args ) ;
84
+ }
85
+ }
78
86
} finally {
79
87
if ( destroyHooksExist ( ) )
80
88
emitDestroy ( asyncId ) ;
@@ -88,22 +96,6 @@ function processTicksAndRejections() {
88
96
setHasRejectionToWarn ( false ) ;
89
97
}
90
98
91
- class TickObject {
92
- constructor ( callback , args ) {
93
- this . callback = callback ;
94
- this . args = args ;
95
-
96
- const asyncId = newAsyncId ( ) ;
97
- const triggerAsyncId = getDefaultTriggerAsyncId ( ) ;
98
- this [ async_id_symbol ] = asyncId ;
99
- this [ trigger_async_id_symbol ] = triggerAsyncId ;
100
-
101
- if ( initHooksExist ( ) ) {
102
- emitInit ( asyncId , 'TickObject' , triggerAsyncId , this ) ;
103
- }
104
- }
105
- }
106
-
107
99
// `nextTick()` will not enqueue any callback when the process is about to
108
100
// exit since the callback would not have a chance to be executed.
109
101
function nextTick ( callback ) {
@@ -127,7 +119,17 @@ function nextTick(callback) {
127
119
128
120
if ( queue . isEmpty ( ) )
129
121
setHasTickScheduled ( true ) ;
130
- queue . push ( new TickObject ( callback , args ) ) ;
122
+ const asyncId = newAsyncId ( ) ;
123
+ const triggerAsyncId = getDefaultTriggerAsyncId ( ) ;
124
+ const tickObject = {
125
+ [ async_id_symbol ] : asyncId ,
126
+ [ trigger_async_id_symbol ] : triggerAsyncId ,
127
+ callback,
128
+ args
129
+ } ;
130
+ if ( initHooksExist ( ) )
131
+ emitInit ( asyncId , 'TickObject' , triggerAsyncId , tickObject ) ;
132
+ queue . push ( tickObject ) ;
131
133
}
132
134
133
135
let AsyncResource ;
0 commit comments