It's the usual setTimeout, but with promises or async/await.
You can add it as a git submodule to your project:
git submodule add 'https://github.com/OWLjz18/promiseTimeout.git'
Or you can use the npm module:
npm i promise-timeout-jz
Or with pnpm:
pnpm add promise-timeout-jz
promiseTimeout(callback[, delay, { error }]);
- callback => It is the callback that will execute after the specified time.
- delay? => It is the time it will take before executing the callback.
- error? => With this parameter we can intentionally reject the promise. What is it for? In case you want to test error handling.
In the examples I will assume you are using Nodejs and the ESmodules.
Way #1: Using promises.
import promiseTimeout from 'promise-timeout-jz';
console.log('HTML');
promiseTimeout(() => console.log('CSS'), 2000)
.then(() => console.log('Javascript'))
.catch(error => console.error(error));
Way #2: Using async/await.
import promiseTimeout from 'promise-timeout-jz';
(async () => {
console.log('HTML');
await promiseTimeout(() => console.log('CSS'), 2000);
console.log('Javascript');
})();
Or with top-level await:
import promiseTimeout from 'promise-timeout-jz';
console.log('HTML');
await promiseTimeout(() => console.log('CSS'), 2000);
console.log('Javascript');
As a result in any of the three previous examples, we obtain the following by console:
- HTML
- CSS (after two seconds)
- Javascript
Let's look at one last example, where we make the promise to be rejected, using the error parameter:
import promiseTimeout from 'promise-timeout-jz';
console.log('HTML');
promiseTimeout(() => console.log('CSS'), 2000, { error: true })
.then(() => console.log('Javascript')) // Skip this...
.catch(error => console.error(error)); // The error is fired and goes into the catcher.
NOTE: In some forums (such as stack overflow, for example), there is already a solution like the following:
const delay = (cb, ms) => new Promise(res => setTimeout(() => res(cb()), ms));
And yes, it's a single line instead of a module installation, but... I wanted to do my own. 😹
- José Zambrano (OWLjz18) => Project creator.
- Instagram => @owljz18
- Email => owl.jz18@gmail.com
If you like the project, you can give us a star. 🌟
This project is licensed under an MIT license, please visit the LICENSE.md file for more information about it.