⏰ Waitasecond
Wait a second is an extremely simple and elegant tool for using working with async code and Promises. It is usable by browser, worker, and node environment and fully typed.
🔥 Install
Install from NPM
npm i waitasecond
🕛 Await forTime (setTimeout equivalent)
In JavaScript, there is an elegant way how to write asynchronous code with async/await syntax construct. Every internal function and library is heading forward to be compatible with Promises and deprecating its old callback type.
But there are some relicts from callback hell like setTimeout, requestAnimationFrame,.... Waitasecond has motivation to turn this into elegant syntax:
import { forTime } from 'waitasecond';
console.log(`⏳ This is logged immediately.`);
await forTime(500);
console.log(`⌛ And this after 500 milliseconds.`);
await forTime(666);
console.log(`😈 Wow, I have escaped from callback hell`);
📖Documentation
💻Code
🕧 Await forImmediate (setImmediate equivalent)
import { forImmediate } from 'waitasecond';
async function doSomething() {
console.log(`🍏 foo`);
await forImmediate();
console.log(`🍎 bar`);
}
doSomething();
doSomething();
await doSomething();
await doSomething();
Note: Despite window.setImmediate is a non-standard feature and it is not working in node, function forImmediate is working in all environments
Note: If you want to use an equivalent of setInterval, see RxJS interval.
📖Documentation
💻Code
With forAnimationFrame you can write nice looking render/update/whatever loops.
import { forAnimationFrame } from 'waitasecond';
while (
true
) {
const now = await forAnimationFrame();
updateScene(now);
renderScene(now);
}
Note: This is working only in a browser environment.
📖Documentation
💻Code
🕜 Await forEver
forEver function returns a promise which never resolves or rejects. It is an elegant way to test what happened if some part of asynchronous code stuck (for example, fetch call).
import { forEver } from 'waitasecond';
await forEver();
console.log(`🧟 This will never ever happen.`);
📖Documentation
💻Code
🕑 Await forTimeSynced
forTimeSynced is an ideal way how to do periodical ticking in an unstable environment.
For example, if you want to run a process every 10 minutes on a server, but PM2 is restarting a server unexpectedly.
import { forTimeSynced } from 'waitasecond';
while (true) {
await forTimeSynced(10 * 60 * 1000);
console.log(
`⌛ This will be logged every 10 minutes according to computer time. So it fires for example on 12:00, 12:10, 12:20,...`,
);
}
📖Documentation
💻Code
🕝 Await forValueDefined
import { forValueDefined } from 'waitasecond';
const firstName = forValueDefined(() => data.firstName);
Note: This is not definitely the ideal way how to wait for things. But it can be helpful if you want to "observe" some mutating object which do not support it natively.
📖Documentation
💻Code
🕒 Await forAllImagesInElement
import { forAllImagesInElement } from 'waitasecond';
await forAllImagesInElement(document.body);
console.log(`🖼️ Now I can be sure that all images in body are loaded.`);
await renderToPdf(document.body);
📖Documentation
💻Code
🖋️ Contributing
I am open to pull requests, feedback, and suggestions. Or if you like this utility, you can ☕ buy me a coffee or donate via cryptocurrencies.
You can also ⭐ star the waitasecond package, follow me on GitHub or various other social networks.
✨ Partners
Become a partner