首页 > Web开发 > 详细

js 怎样把定时器弄成同步的

时间:2019-05-07 18:31:32      阅读:491      评论:0      收藏:0      [点我收藏+]

最近遇到一个问题, 定时器每隔1秒发一次请求,要求本次请求成功后才能发下一次请求,需要把定时器弄成同步的
至于怎么弄成同步的,真是一把心酸泪呀
直接贴代码吧
```
<div style="height: 100px;width: 200px;float: right;">
  <button id="btn">Clear Timer</button>
</div>
<script type="text/javascript">
  var timer = {
    timers:{},
    start:function(asyn,fun,delay,id){
      if(typeof fun === "function"){
        var args = Array.prototype.slice.call(arguments,4),t,func,_this = this;
        func = function(args){
          var ags = arguments;
          if(!Array.isArray) {
            Array.isArray = function (vArg) {
              return Object.prototype.toString.call(vArg) === "[object Array]";
            };
          }
          if(!Array.isArray(args))
            ags = Array.prototype.slice.call(arguments,0)
          else
            ags = args;
          fun.apply(null,ags);
          if(asyn){
            console.log("asynchronous timer");
            _this.timers[id] = setInterval(function(){
              fun.apply(null,ags);
            },delay);
          }else{
            console.log("synchronous timer");
            _this.timers[id] = setTimeout(function(){
              func.apply(null,ags);
            },delay);
          }
        };
        setTimeout(func,delay,args);
      }
    },
    clear:function(id){
      clearTimeout(this.timers[id]);
      clearInterval(this.timers[id]);
      delete this.timers.id;
    }

  };
  function f1(p){
   console.log("f1() : param1 : "+p+" , param2 : "+arguments[1] + " , param3 : "+arguments[2] + " " + new Date());
  }
  //test
  //timer.start(true,f1,2000,"asyn","aa","bb","cc");
  timer.start(false,f1,2000,"asyn","aa","bb","cc");

  $("#btn").click(function(){
    $.each(timer.timers,function(k,v){
    console.log("key : "+k+" , v : "+v);
  })
  timer.clear("asyn")
});
</script>
```

同步的执行结果如下:

技术分享图片

异步的执行结果如下:

技术分享图片

 

js 怎样把定时器弄成同步的

原文:https://www.cnblogs.com/Regina-wisdom/p/10826830.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!