2016-09-05 12 views
-2

console.log();は、期限が切れた後にのみ実行してから、繰り返しますが、ページの読み込み直後では実行しません。これはどのように達成されますか?唯一のsetInterval使用setTimeoutを使用して最初のオカレンスをスキップする

function setTimer(t) { 
    (function timeout() { 
    console.log('timer '+t+' seconds') 
    setTimeout(timeout, t*1000); 
    })(); 
} 

setTimer(5); 
setTimer(10); 
setTimer(15); 
setTimer(20); 

https://jsfiddle.net/y969uLhx/

+1

'document.ready'コールバックと組み合わせて[' setInterval'](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval)を使用してください。 –

+0

@ ConstantinAzizov 'setInterval'には問題があり、私はそれを使用したくありません。 – user1032531

+0

なぜマークダウンですか? – user1032531

答えて

1

あなたはたとえば以下の定義済みperiods.Theに何度も何度も実行されますのsetIntervalを使用することができますが、すべての2番目の 'こんにちは' に印刷されます。次を使用する必要があるのsetIntervalを停止する

var myID = setInterval(function(){ 
    console.log('Hello there'); 
},1000); 

のみ のsetTimeout使用
clearInterval(myID); 

:またのsetTimeoutを使用し、その機能を呼び出すことができます

をそれ自身を呼び出すでしょう。以下の例では、の1秒後にを実行してから、コンソールに「Hello There」という2回目の印刷を繰り返します。 の両方を使用して

setTimeout(function(){ 
     CallMyself(); 
    }, 
// Set the Execution to take place exactly 1000 ms after it has been called. 
    1000); 

    function CallMyself(){ 
     console.log('Hello There'); 
     setTimeout(function(){ 
     CallMyself(); 
     }, 
    // Set the period of each loop to be 1000 ms 
    1000); 
    } 

を組み合わせる:

をまたのsetIntervalのsetTimeoutを組み合わせることができます。次の例では、の1秒が経過した後、毎秒の "Hello There"が印刷されます。

setTimeout(function(){ 
    setInterval(function(){ 
     console.log('Hello there'); 
    },1000); 
    },1000); 

あなたが別のタイマーを作成できるように引数として初期ディレイとループディレイを取る関数の例:

// First argument is the Delay in Execution. 
// Second argument is the period it takes for each loop to be completed. 

setCustomTimer(1 , 2); 
 
    setCustomTimer(2 , 4); 
 
    
 
    function setCustomTimer(initialDelay , LoopDelay){ 
 
     console.log('Initial Delay of ' + initialDelay + ' Seconds'); 
 
     
 
     var myDelay = LoopDelay; 
 
     
 
     setTimeout(function(){ 
 
     console.log('Initial Delay of ' + initialDelay + ' seconds is Over.  Starting Loop. '); 
 
     CallMyself(myDelay); 
 
     },initialDelay * 1000); 
 
    } 
 
    
 
    function CallMyself(LoopDelay){ 
 
     console.log('Loop every ' + LoopDelay + ' Seconds'); 
 
     setTimeout(function(){ 
 
     CallMyself(LoopDelay); 
 
     },LoopDelay * 1000); 
 
    }

+0

'setTimeout()'を使ってどのように達成できますか(2番目の例)?それは即座に実行されます。これは具体的には私が防止したいものです。 – user1032531

+0

setTimeOutは、渡された値に従って実行されます。私の例では、setTimeOutは呼び出されてから1秒後に実行されます。それにもかかわらず、私はあなたのニーズに微調整できるコードを少し追加しました。 2番目の例を確認してください。 – Strahdvonzar

+0

Humm 2つの 'setTimeout()'関数。それは少し複雑に見えますが、最初のアプローチを使用するかもしれませんが、わずかに修正されます。 https:// jsfiddle。net/2f0kq2u8 /。私が設定したタイマーの数は任意です(例では5,10,15,20秒ですが、このような連続した時間にはより多くの時間があるかもしれません) )。 – user1032531

0

何について以下:

function MyLoop(t) { 
    setTimeout(function() { 
    console.log('Loop '+t+' seconds.') 
    MyLoop(t); 
    }, t * 1000); 
} 

MyLoop(5); 
MyLoop(10); 
MyLoop(15); 
MyLoop(20); 
関連する問題