wakeful
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 = ; let serviceRunning = true;// we'll change the state of the service after 6s; // the idea here is to stop the timeout gracefully without exceptions,// and exit the loop of the program while it's in "sleep" modeasync { const errMsg = "interruption!"; // custom err message const predicate = serviceRunning; // all's good until false const interval = 1250; // default is 1000ms try do processstdout; await ; while true; catch err if err === errMsg processstdout; else processstdout; };