接口轮询构造器2

文章介绍了如何实现一个基础的接口轮询构造器,避免使用setInterval,转而采用setTimeout与Promise结合的方式,以更好地控制执行顺序和满足复杂业务需求。构造器包含开始、结束和延时功能,并提供了示例代码展示其实用性。
摘要由CSDN通过智能技术生成

接口轮询构造器

这里实现了基础的接口轮询构造器,如果有更复杂的轮询需求可以自行添加逻辑。

不用setInterval的原因是,它的执行机制是只负责每隔一段时间往任务队列(这块有兴趣的可以了解一下event loop,任务队列和执行栈的工作方式)添加执行函数,不管函数结果如何,不管上一个执行函数是否执行,很大程度上不满足业务需求。

用setTimeout可以和promise配合,严格控制执行顺序,实现思路参考了ahooks里的轮询钩子函数


// 构造器
class proll{
    constructor(delayTime){
      // 延时时间
      this.delayTime = delayTime
      // 轮询结束标志
      this.flag = true
    }

    // 轮询结束方法,用箭头函数的目的是让this指向实例,不需要用apply或者call改变this指向
    cancel = ()=>{
      this.flag = false
    }
  // 延时函数
    timeoutPromise = ()=>{
      return new Promise(resolve => {
         setTimeout(resolve,this.delayTime)
      })
    }

  // 轮询开始函数
    async start(func){
      // 循环
      while(this.flag){
        try{
          // 执行函数
          await func()
        }catch(err){
          // 错误处理
            console.warn('err');
        }finally{
          // 延时
          await this.timeoutPromise()
        }
      }
    }
  }


// 使用demo

	// 执行函数
  function func (){
    return new Promise((resolve) => {
        console.log(2222)
        setTimeout(resolve,50)
    })
  }
	// 创建实例
  let prollFunc =  new proll( 1000)
  console.log(prollFunc);
  // 开始
  prollFunc.start(func)
  // 5s后结束
  setTimeout(prollFunc.cancel,5000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值