/superagent-d2l-queue

Request queue and backoff using superagent

Primary LanguageJavaScriptApache License 2.0Apache-2.0

#Request Queue

NPM version Build status Coverage Status Dependency Status

Extends Superagent by adding the ability to queue up requests and retry failed requests due to timeouts.

Installation

Install from NPM:

npm install superagent-d2l-queue --save

Usage

superagentQueue(options)
const request = require( 'superagent' );
const superagentQueue = require('superagent-d2l-queue');

// ...

request
    .get( ... )
    .use( superagentQueue( ... ) )
    .end( function( err, res ) {
        // ...
    });

All parameters are optional. Defaults are below.

queue: undefined, // use `superagentQueue.makeQueue()``
initialTimeout: 2000,
backoff: {
    exp: { // Exponential backoff
        factor: 1.4 //  (1.4 ^ retryCount)
    },
    retries: 5, // Number of retries
    compute: function( retryCount ) { // Compute the time between each retry interval.
        return Math.round( initialTimeout *
            Math.pow( backoff.exp.factor, retryCount ) );
    }
}
Using Queues

Specify an Array that will be used as a queue to chain multiple Superagent requests. Only one request will execute at a time. This is similar to what can be done with libraries such as Q.

const request = require( 'superagent' );
const superagentQueue = require('superagent-d2l-queue');

// ...

const queue = superagentQueue.makeQueue();

const first = request
    .get( ... )
    .use( superagentQueue( { queue } ) )
    .end( function( err, res ) {
        // ...
    });

const second = request
    .get( ... )
    .use( superagentQueue( { queue } ) )
    .end( function( err, res ) {
        // ...
    });

const third = request
    .get( ... )
    .use( superagentQueue( { queue } ) )
    .end( function( err, res ) {
        // ...
    });

// etc...
`superagent.retryOnConnectionFailure( handler )``

When a request fails due to a timeout or connection failure the request will be retried every 2 seconds until it can successfully send the request. A handler function can be specified in order to complete some action whenever a timeout occurs. This handler is optional.

const request = require( 'superagent' );
const superagentQueue = require('superagent-d2l-queue');

request
    .get( ... )
    .use( superagentQueue( ... ) )
    .retryOnConnectionFailure( function() {
        //do something
    })
    .end( function( err, res ) {
        // ...
    });

Contributing

  1. Fork the repository. Committing directly against this repository is highly discouraged.

  2. Make your modifications in a branch, updating and writing new unit tests as necessary in the spec directory.

  3. Ensure that all tests pass with npm test

  4. rebase your changes against master. Do not merge.

  5. Submit a pull request to this repository. Wait for tests to run and someone to chime in.

Code Style

This repository is configured with EditorConfig and ESLint rules.