#Request Queue
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
-
Fork the repository. Committing directly against this repository is highly discouraged.
-
Make your modifications in a branch, updating and writing new unit tests as necessary in the
spec
directory. -
Ensure that all tests pass with
npm test
-
rebase
your changes against master. Do not merge. -
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.