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());
})();