实现一个轮询函数

要求

函数接收两个函数为参数,一个返回boolean值的功能函数,第二个是功能函数返回true时需要执行的回调函数。
初始等待 1 秒后执行,不成功则增加 50%的等待时间,再执行功能函数。

function simplePoller(queryFn = () => { }, callback = () => { }) {
  // 初始间隔时间(ms)
  let baseTime = 1000;
  // 等待时间的增长倍率
  let timeRate = 1.5;

  let timeHandler = (time) => {
    setTimeout(() => {
      let res = queryFn();
      if (res === true) {
        callback();
      } else if (res === false) {
        // 等待时间按倍率增加,向上取整,去除时间小数
        time = Math.ceil(time * timeRate);
        timeHandler(time);
      } else {
        console.error('queryFn 函数必须返回一个boolean值');
      }
    }, time)
  }
  timeHandler(baseTime);
}

你可能感兴趣的:(实现一个轮询函数)