3.8 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			3.8 KiB
		
	
	
	
	
	
	
	
Class: RetryHandler
Extends: undici.DispatcherHandlers
A handler class that implements the retry logic for a request.
new RetryHandler(dispatchOptions, retryHandlers, [retryOptions])
Arguments:
- options Dispatch.DispatchOptions & RetryOptions(required) - It is an intersection ofDispatcher.DispatchOptionsandRetryOptions.
- retryHandlers RetryHandlers(required) - Object containing thedispatchto be used on every retry, andhandlerfor handling thedispatchlifecycle.
Returns: retryHandler
Parameter: Dispatch.DispatchOptions & RetryOptions
Extends: Dispatch.DispatchOptions.
RetryOptions
- retry (err: Error, context: RetryContext, callback: (err?: Error | null) => void) => void(optional) - Function to be called after every retry. It should pass error if no more retries should be performed.
- maxRetries number(optional) - Maximum number of retries. Default:5
- maxTimeout number(optional) - Maximum number of milliseconds to wait before retrying. Default:30000(30 seconds)
- minTimeout number(optional) - Minimum number of milliseconds to wait before retrying. Default:500(half a second)
- timeoutFactor number(optional) - Factor to multiply the timeout by for each retry attempt. Default:2
- retryAfter boolean(optional) - It enables automatic retry after theRetry-Afterheader is received. Default:true
- methods string[](optional) - Array of HTTP methods to retry. Default:['GET', 'PUT', 'HEAD', 'OPTIONS', 'DELETE']
- statusCodes number[](optional) - Array of HTTP status codes to retry. Default:[429, 500, 502, 503, 504]
- errorCodes string[](optional) - Array of Error codes to retry. Default: `['ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'ENETDOWN','ENETUNREACH', 'EHOSTDOWN',
RetryContext
- state:- RetryState- Current retry state. It can be mutated.
- opts:- Dispatch.DispatchOptions & RetryOptions- Options passed to the retry handler.
Parameter RetryHandlers
- dispatch (options: Dispatch.DispatchOptions, handlers: Dispatch.DispatchHandlers) => Promise<Dispatch.DispatchResponse>(required) - Dispatch function to be called after every retry.
- handler Extends Dispatch.DispatchHandlers(required) - Handler function to be called after the request is successful or the retries are exhausted.
Examples:
const client = new Client(`http://localhost:${server.address().port}`);
const chunks = [];
const handler = new RetryHandler(
  {
    ...dispatchOptions,
    retryOptions: {
      // custom retry function
      retry: function (err, state, callback) {
        counter++;
        if (err.code && err.code === "UND_ERR_DESTROYED") {
          callback(err);
          return;
        }
        if (err.statusCode === 206) {
          callback(err);
          return;
        }
        setTimeout(() => callback(null), 1000);
      },
    },
  },
  {
    dispatch: (...args) => {
      return client.dispatch(...args);
    },
    handler: {
      onConnect() {},
      onBodySent() {},
      onHeaders(status, _rawHeaders, resume, _statusMessage) {
        // do something with headers
      },
      onData(chunk) {
        chunks.push(chunk);
        return true;
      },
      onComplete() {},
      onError() {
        // handle error properly
      },
    },
  }
);
Example - Basic RetryHandler with defaults
const client = new Client(`http://localhost:${server.address().port}`);
const handler = new RetryHandler(dispatchOptions, {
  dispatch: client.dispatch.bind(client),
  handler: {
    onConnect() {},
    onBodySent() {},
    onHeaders(status, _rawHeaders, resume, _statusMessage) {},
    onData(chunk) {},
    onComplete() {},
    onError(err) {},
  },
});