wakeful

1.0.4 • Public • Published

wakeful

CircleCI

Async sentry that allows a clean breakout from long await when program's state changes.

It was built for a service that slept long times between activities and needed to be interrupted gracefully.

What it does: Async timer/sentry asserting predicate at intervals and stops/rejects with an errMsg if predicate returns false otherwise resolves with okMsg after timeMs.

arguments

wakeful uses these default arguments:

  • timeMs = 0,

  • options: { predicate: () => true, interval: 1000, okMsg: "ok", errMsg: "err" }

timeMs = 0 -> means that wakeful will resolve immedietaly,

  • you can use Infinity value if you'd like it to work forever

predicate -> function that returns boolean; it can check an external condition
interval -> how often wakeful should check the predicate, default: 1000ms
errMsg -> message to be triggered on reject(errMsg),
okMsg -> message to be triggered on resolve(okMsg)

wakeful supports Browser, Node.js & AMD.

USAGE

Refer to index.spec.js for Node.js/jest async tests

const wakeful = require("wakeful");
 
let serviceRunning = true;
// we'll change the state of the service after 6s
wakeful(6000).then(() => (serviceRunning = false));
 
// the idea here is to stop the timeout gracefully without exceptions,
// and exit the loop of the program while it's in "sleep" mode
(async () => {
    const errMsg = "interruption!"; // custom err message
    const predicate = () => serviceRunning; // all's good until false
    const interval = 1250; // default is 1000ms
    try {
        do {
            process.stdout.write("doing stuff...");
            await wakeful(2500, { predicate, errMsg, interval });
        } while (true);
    } catch (err) {
        if (err === errMsg) {
            process.stdout.write("program terminated gracefully!");
        } else {
            process.stdout.write(err.stack);
        }
    }
})();
 

Dependencies (0)

    Dev Dependencies (2)

    Package Sidebar

    Install

    npm i wakeful

    Weekly Downloads

    3

    Version

    1.0.4

    License

    ISC

    Unpacked Size

    10.4 kB

    Total Files

    9

    Last publish

    Collaborators

    • stormcrows