npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

reattempt-promise-function

v1.0.0

Published

Reattempt function calls that return promises when those promises reject.

Downloads

13

Readme

reattempt-promise-function

reattempt-promise-function allows you to easily reattempt async actions.

It does this by re-calling a function that returns a promise when that promise is rejected. You can specify the delay between attempts and the maximum number of attempts.

Perfect for waiting for services to start during Gulp and Grunt build and test tasks or attempting to reconnect to an application backend after becoming disconnected.

Quickstart

Node

npm install reattempt-promise-function
var reattempt = require('reattempt-promise-function');
reattempt(promiseFunction, arguments, delayBetweenAttempts, numberOfAttempts);

Browser

bower install https://github.com/beckyconning/reattempt-promise-function/tarball/master --save
<script src="bower_components/reattempt-promise-function/bundle.js"></script>
reattempt(promiseFunction, arguments, delayBetweenAttempts, numberOfAttempts);

Other options

You can also use bundle.js with Browserify / CommonJS / AMD.

Example

var reattempt = require('reattempt-promise-function');
var requestPromise = require('request-promise');
var uri = 'http://localhost:3000';
var requestOptions = { 'method': 'GET', 'uri': uri };

// Attempt http get request 10 times with a 250ms delay between attmpts
reattempt(requestPromise, [requestOptions], 250, 10)
    .then(function (response) {
        console.log('`' + uri + '` is now available.')
    })
    .catch(function (error) {
        console.log('Couldn\'t connect to `' + uri '`.');
    });

Caveats

If the function you want to reattempt contains references to this make sure you bind the required value of this to it before passing it to reattempt.

var Food = function (name, sodium) {
    this.name = name;
    this.sodium = sodium;
};

Food.prototype.getSummary = function () {
    if (typeof this.name !== 'undefined' && typeof this.sodium !== undefined) {
        var summary = this.name + ' contains ' + this.sodium + 'g of sodium per 100g.'
        return Promise.resolve(summary);
    } else {
        return Promise.reject('Sorry there was nothing to summarise.');
    }
};

var strawberryJam = new Food('Stawberry jam', 0.2);
var getStrawberryJamSummary = strawberryJam.getSummary.bind(strawberryJam);

// The following is attempted 10 times with a 250ms delay between each attempt
// before being rejected.
reattempt(strawberryJam.getSummary, [], 250, 10).then(function (summary) {
    console.log(summary);
}).catch(function (error) {
    console.log(error);
});

// The following resolves immediately.
reattempt(getStrawberryJamSummary, [], 250, 10).then(function (summary) {
    console.log(summary);
}).catch(function (error) {
    console.log(error);
});

For more information about Function.prototype.bind() please see the MDN documentation.

Testing

Use npm test to run the unit tests.

Building

Use npm run build to build the bundle.js.