Git Product home page Git Product logo

timeout-latch's Introduction

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!

To counter this we can clear the previous timer and start again. And it works but has the overhead of cancelling and creating new timers. Also, it's a timer per latch.

Architecture?

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.

It also has the ability pause the scheduler if no active latches are present. As soon as a new latch is scheduled or an old latch is reset, it starts again.

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
  • clearResetCallback(functionReference: Function)
    • Clears the associated callback

timeout-latch's People

Contributors

iostreamer-x avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.