in lib/request.js [56:108]
fsm.setupStates = function () {
var transition = async function transition(_, done) {
var self = this;
var origError = self.response.error;
try {
await self.emit(self._asm.currentState, async (err) => {
if (err) {
if (isTerminalState(self)) {
throw err;
} else {
self.response.error = err;
done(err);
}
} else {
done(self.response.error);
}
});
} catch (err) {
if (isTerminalState(self)) {
throw err;
} else {
self.response.error = err;
done(err);
}
}
};
this.addState('restart', 'build', 'error', async function (err, done) {
err = this.response.error;
if (!err) return done();
err.retryable = TableStore.DefaultRetryPolicy.shouldRetry(this.response.retryCount, this.response.error, this.response.request.operation);
if (!err.retryable) return done(err);
if (this.response.retryCount < TableStore.DefaultRetryPolicy.maxRetryTimes) {
this.response.retryCount++;
done();
} else {
done(err);
}
});
this.addState('build', 'afterBuild', 'restart', transition);
this.addState('afterBuild', 'sign', 'restart', transition);
this.addState('sign', 'send', 'retry', transition);
this.addState('retry', 'afterRetry', 'afterRetry', transition);
this.addState('afterRetry', 'sign', 'error', transition);
this.addState('send', 'validateResponse', 'retry', transition);
this.addState('validateResponse', 'extractData', 'extractError', transition);
this.addState('extractError', 'extractData', 'retry', transition);
this.addState('extractData', 'success', 'retry', transition);
this.addState('success', 'complete', 'complete', transition);
this.addState('error', 'complete', 'complete', transition);
this.addState('complete', null, null, transition);
};