let defaultInterval = 100;
let defaultTimeout = 2000;

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
 
const eventually = async (fn, timeout = defaultTimeout, interval = defaultInterval) => {
  let start = Date.now();
  let loop = async() => {
    try {
      await fn();
    } catch (err) {
      if (Date.now() - start > timeout) {
        throw err;
      }
      await new Promise((resolve) => setTimeout(resolve, interval))
      await loop();
    }
  };
  await loop();
};
module.exports = eventually;