11var TableStore = require ( './core' ) ;
22var inherit = TableStore . util . inherit ;
3- var domain = TableStore . util . nodeRequire ( 'domain' ) ;
43
54var hardErrorStates = { success : 1 , error : 1 , complete : 1 } ;
65
@@ -13,28 +12,32 @@ function AcceptorStateMachine(states, state) {
1312 this . states = states || { } ;
1413}
1514
16- AcceptorStateMachine . prototype . runTo = function runTo ( finalState , done , bindObject , inputError ) {
15+ AcceptorStateMachine . prototype . runTo = async function runTo ( finalState , done , bindObject , inputError ) {
1716 if ( typeof finalState === 'function' ) {
1817 inputError = bindObject ; bindObject = done ;
1918 done = finalState ; finalState = null ;
2019 }
2120
22- var self = this ;
23- var state = self . states [ self . currentState ] ;
24- state . fn . call ( bindObject || self , inputError , function ( err ) {
25- if ( err ) {
26- if ( bindObject . logger ) bindObject . logger . log ( self . currentState , '->' , state . fail , err ) ;
27- if ( state . fail ) self . currentState = state . fail ;
28- else return done ? done ( err ) : null ;
29- } else {
30- if ( bindObject . logger ) bindObject . logger . log ( self . currentState , '->' , state . accept ) ;
31- if ( state . accept ) self . currentState = state . accept ;
32- else return done ? done ( ) : null ;
33- }
34- if ( self . currentState === finalState ) return done ? done ( err ) : null ;
21+ try {
22+ var self = this ;
23+ var state = self . states [ self . currentState ] ;
24+ await state . fn . call ( bindObject || self , inputError , async ( err ) => {
25+ if ( err ) {
26+ if ( bindObject . logger ) bindObject . logger . log ( self . currentState , '->' , state . fail , err ) ;
27+ if ( state . fail ) self . currentState = state . fail ;
28+ else return done ? done ( err ) : null ;
29+ } else {
30+ if ( bindObject . logger ) bindObject . logger . log ( self . currentState , '->' , state . accept ) ;
31+ if ( state . accept ) self . currentState = state . accept ;
32+ else return done ? done ( ) : null ;
33+ }
34+ if ( self . currentState === finalState ) return done ? done ( err ) : null ;
3535
36- self . runTo ( finalState , done , bindObject , err ) ;
37- } ) ;
36+ await self . runTo ( finalState , done , bindObject , err ) ;
37+ } ) ;
38+ } catch ( err ) {
39+ if ( done ) done ( err ) ;
40+ }
3841} ;
3942
4043AcceptorStateMachine . prototype . addState = function addState ( name , acceptState , failState , fn ) {
@@ -51,31 +54,33 @@ AcceptorStateMachine.prototype.addState = function addState(name, acceptState, f
5154
5255var fsm = new AcceptorStateMachine ( ) ;
5356fsm . setupStates = function ( ) {
54- var transition = function transition ( _ , done ) {
57+ var transition = async function transition ( _ , done ) {
5558 var self = this ;
5659 var origError = self . response . error ;
57- self . emit ( self . _asm . currentState , function ( err ) {
58- if ( err ) {
59- if ( isTerminalState ( self ) ) {
60- if ( domain && self . domain instanceof domain . Domain ) {
61- err . domainEmitter = self ;
62- err . domain = self . domain ;
63- err . domainThrown = false ;
64- self . domain . emit ( 'error' , err ) ;
65- } else {
60+ try {
61+ await self . emit ( self . _asm . currentState , async ( err ) => {
62+ if ( err ) {
63+ if ( isTerminalState ( self ) ) {
6664 throw err ;
65+ } else {
66+ self . response . error = err ;
67+ done ( err ) ;
6768 }
6869 } else {
69- self . response . error = err ;
70- done ( err ) ;
70+ done ( self . response . error ) ;
7171 }
72+ } ) ;
73+ } catch ( err ) {
74+ if ( isTerminalState ( self ) ) {
75+ throw err ;
7276 } else {
73- done ( self . response . error ) ;
77+ self . response . error = err ;
78+ done ( err ) ;
7479 }
75- } ) ;
80+ }
7681 } ;
7782
78- this . addState ( 'restart' , 'build' , 'error' , function ( err , done ) {
83+ this . addState ( 'restart' , 'build' , 'error' , async function ( err , done ) {
7984 err = this . response . error ;
8085 if ( ! err ) return done ( ) ;
8186 err . retryable = TableStore . DefaultRetryPolicy . shouldRetry ( this . response . retryCount , this . response . error , this . response . request . operation ) ;
@@ -122,8 +127,6 @@ TableStore.Request = inherit({
122127 if ( config . maxRetries !== undefined ) {
123128 TableStore . DefaultRetryPolicy . maxRetryTimes = config . maxRetries ;
124129 }
125- //如果在sdk外部包装了一层domain,就把它传到this.domain
126- this . domain = domain && domain . active ;
127130 this . operation = operation ;
128131 this . params = params || { } ;
129132 this . httpRequest = new TableStore . HttpRequest ( endpoint , region ) ;
@@ -156,23 +159,23 @@ TableStore.Request = inherit({
156159 * request = client.listTable({Bucket: 'bucket', Key: 'key'});
157160 * request.send(function(err, data) { console.log(err, data); });
158161 */
159- send : function send ( callback ) {
162+ send : async function send ( callback ) {
160163 if ( callback ) {
161164 this . on ( 'complete' , function ( resp ) {
162165 callback . call ( resp , resp . error , resp . data ) ;
163166 } ) ;
164167 }
165- this . runTo ( ) ;
168+ await this . runTo ( ) ;
166169
167170 return this . response ;
168171 } ,
169172
170- build : function build ( callback ) {
171- return this . runTo ( 'send' , callback ) ;
173+ build : async function build ( callback ) {
174+ await this . runTo ( 'send' , callback ) ;
172175 } ,
173176
174- runTo : function runTo ( state , done ) {
175- this . _asm . runTo ( state , done , this ) ;
177+ runTo : async function runTo ( state , done ) {
178+ await this . _asm . runTo ( state , done , this ) ;
176179 return this ;
177180 } ,
178181
@@ -181,15 +184,19 @@ TableStore.Request = inherit({
181184 * or an array of args to send to the event.
182185 * @api private
183186 */
184- emitEvent : function emit ( eventName , args , done ) {
187+ emitEvent : async function emit ( eventName , args , done ) {
185188 if ( typeof args === 'function' ) { done = args ; args = null ; }
186- if ( ! done ) done = function ( ) { } //this.unhandledErrorCallback ;
189+ if ( ! done ) done = function ( ) { } ;
187190 if ( ! args ) args = this . eventParameters ( eventName , this . response ) ;
188191 var origEmit = TableStore . SequentialExecutor . prototype . emit ;
189- origEmit . call ( this , eventName , args , function ( err ) {
190- if ( err ) this . response . error = err ;
191- done . call ( this , err ) ;
192- } ) ;
192+ try {
193+ await origEmit . call ( this , eventName , args , async ( err ) => {
194+ if ( err ) this . response . error = err ;
195+ done . call ( this , err ) ;
196+ } ) ;
197+ } catch ( err ) {
198+ if ( done ) done ( err ) ;
199+ }
193200 } ,
194201
195202 /**
@@ -225,4 +232,4 @@ TableStore.Response = inherit({
225232 this . httpResponse = new TableStore . HttpResponse ( ) ;
226233 }
227234
228- } ) ;
235+ } ) ;
0 commit comments