File tree Expand file tree Collapse file tree 2 files changed +34
-14
lines changed Expand file tree Collapse file tree 2 files changed +34
-14
lines changed Original file line number Diff line number Diff line change @@ -67,26 +67,27 @@ serverlessSdk.setEndpoint = (endpoint) => {
67
67
serverlessSdk . createSpan = ( name , closure ) => {
68
68
const span = serverlessSdk . _createTraceSpan ( name ) ;
69
69
70
- if ( closure && isThenable ( closure ) ) {
71
- return closure . then (
72
- ( result ) => {
73
- span . close ( ) ;
74
- return result ;
75
- } ,
76
- ( error ) => {
77
- span . close ( ) ;
78
- throw error ;
79
- }
80
- ) ;
81
- }
82
-
83
70
if ( closure && isFunction ( closure ) ) {
84
71
let result ;
85
72
try {
86
73
result = closure ( ) ;
87
- } finally {
74
+ } catch ( e ) {
88
75
span . close ( ) ;
76
+ throw e ;
77
+ }
78
+ if ( isThenable ( result ) ) {
79
+ return result . then (
80
+ ( resolution ) => {
81
+ span . close ( ) ;
82
+ return resolution ;
83
+ } ,
84
+ ( error ) => {
85
+ span . close ( ) ;
86
+ throw error ;
87
+ }
88
+ ) ;
89
89
}
90
+ span . close ( ) ;
90
91
return result ;
91
92
}
92
93
return span ;
Original file line number Diff line number Diff line change @@ -114,4 +114,23 @@ describe('.createSpan', () => {
114
114
expect ( spans [ 0 ] . endTime ) . to . not . be . undefined ;
115
115
expect ( result ) . to . equal ( 'test' ) ;
116
116
} ) ;
117
+
118
+ it ( 'should create nested spans using async context .createSpan' , async ( ) => {
119
+ const spans = [ ] ;
120
+ serverlessSdk . _eventEmitter . on ( 'trace-span-close' , ( traceSpan ) => spans . push ( traceSpan ) ) ;
121
+ const result = await serverlessSdk . createSpan ( 'test.test1' , async ( ) => {
122
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 500 ) ) ;
123
+ await serverlessSdk . createSpan ( 'test.test2' , async ( ) => {
124
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 500 ) ) ;
125
+ } ) ;
126
+ return new Promise ( ( resolve ) => resolve ( 'test' ) ) ;
127
+ } ) ;
128
+
129
+ expect ( spans . length ) . to . equal ( 2 ) ;
130
+ expect ( spans [ 0 ] . name ) . to . equal ( 'test.test2' ) ;
131
+ expect ( spans [ 1 ] . parentSpan ) . to . equal ( rootSpan ) ;
132
+ expect ( spans [ 1 ] . name ) . to . equal ( 'test.test1' ) ;
133
+ expect ( spans [ 0 ] . parentSpan ) . to . equal ( spans [ 1 ] ) ;
134
+ expect ( result ) . to . equal ( 'test' ) ;
135
+ } ) ;
117
136
} ) ;
You can’t perform that action at this time.
0 commit comments