2016-11-04 19 views
1

次のコードセグメントでは、timeDiffをwaitTimeに設定できるようにします。しかし、内部関数内のtimeDiffは実行されたときにだけ価値があることを理解しています。要素の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 
     })(); 
    } 

単純に言えば、waitTimeはelement.TIMEDIFFに依存する必要があります。それを達成する方法?

+0

「タイムアウト」の各機能が次の機能の待ち時間を設定するという目標はありますか? –

答えて

0

このような場合はどうなりますか?私はそれを少し一般的にしましたが、あなたが達成したいと思っていることをしなければなりません。ここではExampleです。次の関数の時間であり、現在実行中の関数内から完全に構成可能です。

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; 
    } 
+1

あなたはそれをテストしましたか?私はこれがうまくいくとは思わない。しかし、それを試してみましょう。タイムアウト機能が設定されている場合、待機時間はafaikに設定する必要があります。 –

+0

あなたが何を意味するかわかりました。 $ timeoutが約束であるという事実を利用して、このような構造がうまくいくと思います。 –

0

私は少し変わった、私はあなたのために動作することを願っています。

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; 
} 
+0

タイムアウトからq.shift()を使用すると、whileループは意図した動作ではない反復の終わりにキューを空にします。 –

+0

q.shift()を使用しないとどうなりますか?彼らのキーで要素を取得する..その仕事ですか? – rafaelkendy

関連する問題