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

timeout-latch

v1.0.1

Published

A simple timeout latch. Like a reverse leaky bucket.

Downloads

1

Readme

timeout-latch

A simple timeout latch. Like a reverse leaky bucket.

It's a simple callback based mechanism to get notified when a timeout has occurred and reset that timeout if need arises. Checkout the visual demo here

Why not plain timeout?

Plain timeouts might not work that easily. For example, one might start a timeout and manage state around it.

function run() {
    setTimeout(
        () => {
            // your callback       
        },
        3000
    )
}
function reset() { // when you want to reset the timer
    run();
}

But we realise that resetting only works when the timeout has completed its work. If we reset before that then we simply have two timeouts!

How does it work?

We run a custom scheduler of our own. This scheduler essentially simulates time, and manages timeouts on its own. The scheduler ticks every 1ms, on each tick it checks if there's a possibility of timeout.

Example

const { scheduleTimeoutLatch } = require('timeout-latch'); //this automatically kickstarts the scheduler

const latch = scheduleTimeoutLatch(3000); // this schedules the timeout
latch.registerOnTimeExhaustedCallback(() => { // configuring the callback
    console.log('done');
})

setTimeout(
    () => {
        latch.reset(); // resetting it so that it runs again
    },
    8000,
)

Latch interface

  • constructor(timeoutMS: number, callback?: Function)
    • timeoutMS controls the decay time
    • callback if provided, will be called if latch decays fully
  • cancel()
    • Cancels the latch and essentially puts it in stand-by mode.
  • reset()
    • Resets the latch fully and takes it back to the original state.
    • Be it cancelled, or decayed, this functions removes all the debuffs.
  • isDone: boolean
    • Boolean flag which tells if latch has fully decayed or not, or if it has been cancelled.
  • registerOnTimeExhaustedCallback(callback: Function)
    • Adds callbacks to latch which will be called when it decays fully.
    • Called only on full decay, no cancelled.
  • clearTimeExhaustedCallback(functionReference: Function)
    • Clears the associated callback
  • registerOnResetCallback(callback: Function)
    • Adds callbacks which will be called when it resets
    • Will only be called if latch's reset function is called