acuminous/zUnit

View on GitHub
lib/utils/timeout.js

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
function timeout(fn, duration) {
  let timer;
  return Promise.race([
    new Promise((resolve, reject) => {
      timer = setTimeout(() => {
        reject(new Error(`Timed out after ${Number(duration).toLocaleString()}ms`));
      }, duration);
    }),
    fn().finally(() => clearTimeout(timer)),
  ]);
}

module.exports = timeout;