实现一个轮询函数

要求

函数接收两个函数为参数,一个返回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);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容