Skip to content

abacaj/resolutejs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

resolute.js

Determined, and unwavering.

Github Releases (by Release) GitHub stars

Finally get to retry during a Promise operation (works in modern browsers as well as node.js), zero dependencies.

It includes a very basic but reliable retry mechanism for a Promise operation.

Minimal requirements: 3kb unminified / 0 dependencies.

Use Cases

  • Database retry
  • API retry
  • Anything...

Packages

NPM - resolutejs

Usage

Download resolute.js from Github Releases (by Release), create a new instance as shown below and optionally provide a callback that is executed every retry, which gives you the current retry count.

Node.js

var Resolute = require("./resolute");

var somePromiseOperation = function() {
    return new Promise(function(resolve, reject) {
        // Make it fail...
        if (err) return reject(err);
        resolve("success");
    });
};

var resolute_options = {
    // Reference to your Promise function, note: this Promise will always fail.
    operation: somePromiseOperation,
    // Maximum number of times to attempt
    maxRetry: 5,
    // Delay between retries in milliseconds
    delay: 2000
};

var resolute_callback = function(retryCount) {
    console.log(retryCount);
};

var resolute = new Resolute(resolute_options, resolute_callback);

// Run the operation stored in options.
resolute.run().then(null).catch(function(err) {
    console.log("failed after trying: " + resolute.maxRetry + " times, with error: " + err);
});

// Pass in a new operation to perform using the same Resolute instance.
resolute.run(somePromiseOperation).then(null).catch(function(err) {
    console.log("failed after trying: " + resolute.maxRetry + " times, with error: " + err);
});

exponential backoff

By passing in the exponential backoff flag resolute will exponentially increase the waiting time between retries.

...

var resolute_options = {
    // Reference to your Promise function, note: this Promise will always fail.
    operation: somePromiseOperation,
    // Maximum number of times to attempt
    maxRetry: 5,
    // Delay between retries in milliseconds
    delay: 2000,
    // exponentially increase wait time between retries
    exponentialBackoff: true, //default false
};

var resolute_callback = function(retryCount, delay) {
    console.log(`Retry ${retryCount} in ${delay} ms`);
};

var resolute = new Resolute(resolute_options, resolute_callback);

// Run the operation stored in options.
resolute.run().then(null).catch(function(err) {
    console.log("failed after trying: " + resolute.maxRetry + " times, with error: " + err);
});

// Pass in a new operation to perform using the same Resolute instance.
resolute.run(somePromiseOperation).then(null).catch(function(err) {
    console.log("failed after trying: " + resolute.maxRetry + " times, with error: " + err);
});

Browser

<script src="resolute.js"></script>
var somePromiseOperation = function() {
    return new Promise(function(resolve, reject) {
        // Make it fail...
        if (err) return reject(err);
        resolve("success");
    });
};

var resolute_options = {
    // Reference to your Promise function, note: this Promise will always fail.
    operation: somePromiseOperation,
    // Maximum number of times to attempt
    maxRetry: 5,
    // Delay between retries in milliseconds
    delay: 2000
};

var resolute_callback = function(retryCount) {
    console.log(retryCount);
};

var resolute = new Resolute(resolute_options, resolute_callback);

// Run the operation stored in options.
resolute.run().then(null).catch(function(err) {
    console.log("failed after trying: " + resolute.maxRetry + " times, with error: " + err);
});

// Pass in a new operation to perform using the same Resolute instance.
resolute.run(somePromiseOperation).then(null).catch(function(err) {
    console.log("failed after trying: " + resolute.maxRetry + " times, with error: " + err);
});

Contributors

About

Finally get to retry during a Promise operation (works in modern browsers as well as nodejs), zero dependencies.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published