async setTimeout
let make setTimeout asynchronous:
function setTimeoutPromise(cb, ms) {
return new Promise((resolve) => {
setTimeout(() => resolve(cb()), ms);
});
}
const someValue = await setTimeoutPromise(() => {
console.log('Do you staf here ');
return 'some value';
}, 4000);
console.log(someValue);
in Node.js from v16 we don't need to rewrite it as it comes natively with asynchronous timers including setTimeout
const timersPromises = require('timers/promises');
(async () => {
const someValue = await timersPromises.setTimeout(4000, () => {
return (() => {
console.log('Do you staf here');
return 'some value';
})()
});
console.log(someValue());
})();