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

esqlate-waitfor

v1.0.1

Published

Wait for a specific condition, by repeatedly trying it

Downloads

6

Readme

WaitFor TS

A simple TypeScript function will wait for a condition to be satisfied.

Why

The Esqlate project, which is a way to design an API using PostgreSQL is modelled as a queue based system, so when you issue a request, you don't get back the result immediately, you need to poll to monitor you request. WaitFor TS was created as a to manage that polling.

How

To use this WaitFor TS you need to supply a function which will return Ready<X>, where X is the result you wish to finally receive. A Ready is somewhat like a Promise, but instead of it being resolved or not, the Ready can be in a state of { complete: true, value: "TheValueYouWant" } or { complete: false }. This is similar to an Algebraic data type from Haskell's Maybe or may Rust's Result.

Installation

npm install --save waitfor-ts

Usage

A Ready is defined like the following:

export interface Ready<X> {
    value?: X;
    complete: boolean;
}

Therefore main thing we need to do is define a function which returns a Ready, in this case getReady(). aside from this we need to add a function to control how the back-off works when attempts are unsuccessful, similar to calcuateNewDelay().

let location = "http://localhost:8803/request/get_customer/wbzAClFJ

// Returns a `Ready`.
function getReady() {
    return fetch(location)
        .then(resp => resp.json())
        .then((j) => {
            if (j.status == "complete") {
                return { complete: true, value: j.location };
            }
            return { complete: false };
        });
}

// Gets the amount of time to wait before a new attempt starts.
function calculateNewDelay(attemptsSoFar) { return attemptsSoFar * 300; }

return waitFor(getReady, calculateNewDelay)
    .then((loc) => {
        window.location = loc;
    });