2017-09-23 16 views
-2

私は送信メッセージシステムに1秒のクールダウンを追加しようとしています(1秒あたり最大1メッセージを送信できます)。だから私の最初の考えは単にタイムアウトを作成し、それがまだ存在するかどうかをチェックするために送信することを試みることでした。それは私が最初に予想したより多くのコード行を取ることが分かった。可能な限り簡単なタイムアウト/コールドダウン機能?

ここに何か不足していますか?

//inside some message sending function 
if(!mySuperCooldown) 
{ 
    //send message 
    mySuperCooldown = cooldown(1000); 
} 

私が正常に構築したものはすべて、負荷のかかるものになり、誰かが以前考えていたように見えます。ありがとう、私の文盲を許そう。

答えて

2

メッセージを許可するフラグを設定し、メッセージを送信するとfalseに設定します。次に、フラグをtrueにリセットする1000ミリ秒のタイムアウトを設定します。

var allowMessage = true; 
function sendMessage(msg) { 
    if (allowMessage) { 
     //do something 
     allowMessage = false; 
     setTimeout(() => allowMessage = true, 1000); 
    } 
} 
+0

ありがとうございます。タイムアウトの中でこの形式の関数を追加することができるかどうかはわかりませんでした。 8分で受け入れます。 –

+0

np。矢印機能はes6機能なので、es5をターゲットにする必要がある場合は、setTimeout(function(){allowMessage = true;}、1000)を実行できます。 –

+0

他のイベントでも同じことを実現するために私が作ったfreakshowは想像できません。 –

2

率制限である1に正常な機能をオン高階関数を作成します。

function rate_limit(delay, func) { 
    var last_call = null; 

    return function() { 
     if (last_call && (Date.now() - last_call <= delay)) { 
      return; 
     } 

     last_call = Date.now(); 

     return func(); 
    }; 
} 

あなたはできるその後、レート制限任意の関数:

my_function()意志のみを実行
var my_function = rate_limit(1000, function() { 
    console.log('foo'); 
}); 

元の関数を1秒に1回呼び出します。

関連する問題