簡體   English   中英

訪問超時函數內的變量

[英]Accessing a variable inside a timeout function

在以下代碼段中,我希望timeDiff可以在waitingTime上設置。 但我明白內部函數中的timeDiff只有在執行時才會獲得值。 如何使用element的TIMEDIFF為give函數設置超時?

  var timeDiff;
  for (var i = 0; i < q.length; i++) {
      (function() {

          timeouts.push($timeout(function() {
              var element = q.shift(); // q is a queue
              timeDiff = element.TIMEDIFF;
              console.log(element.TIMEDIFF); //3000 
              broadcastData(element);
          }, waitingTime));

          // console.log(timeDiff + " timeiff");

          waitingTime = waitingTime + timeDiff; // 1000 + 3000
      })();
  }

簡單來說,waitingTime應該依賴於element.TIMEDIFF。 怎么實現呢?

這樣的事情怎么樣? 我已經把它變得有點泛,但它應該做你希望實現的目標。 這里的例子 下一個函數的時間可以在當前執行的函數中完全配置。

  var waitingTime = 100;
  var q = {length: 100};
  var i = 0;
  var timeouts = [$timeout(getTimeDiff, waitingTime).then(callback)];

  function callback(newTime) {
    while(i < q.length) {
      i++;
      var promise = $timeout(getTimeDiff, newTime).then(callback);
      timeouts.push(promise);
      return promise;
    }
  }

  function getTimeDiff() {
      //here is where you would access the q and get the timediff
      waitingTime += Math.floor(Math.random() * 100);
      console.log(waitingTime + " until next tick");
      return waitingTime;
  }

我改變了一點,希望對你有用。

var timeDiff;
for (var i = 0; i < q.length; i++) {
    var element = q[i];
    timeDiff = element.TIMEDIFF;

    timeouts.push(setTimeout(function(data) {
        broadcastData(data.e);
    }, waitingTime, {e:element}));

    waitingTime = waitingTime + timeDiff;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM