js 怎樣把定時器弄成同步的

最近遇到一個問題, 定時器每隔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;
    }javascript

  };
  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>
```java

同步的執行結果以下:app

異步的執行結果以下:異步

相關文章
相關標籤/搜索