2017-10-31 8 views
2

データベースに特定の値の行があります。その値を自動的にinscrementsするシステムがあり、その値は一定ではありません。数値が30の倍数である場合にユーザーに警告

は、私はそれが の倍数だ毎回この値をユーザーに警告するスクリプトを構築するために必要なデモンストレーション:

  • 値が30である

    - >アラート
  • 値は45です - >
  • 値が60のときに警告しないでください - >アラート

毎回ユーザーがアラートを受信し、私はイベントをデータベースに記録し、データの履歴を保持します。

このスクリプトは、少なくとも1日1回実行されるノードJSサーバー内で実行されます。

マイコード:

function validateValue(id, interval) { 
    //Callback that returns me the present value 
    retreiveValue(id, function(value) { 
     //Checks if the value is multiple of 30 
     if (value % interval == 0) { 
      //Retreive the lastest alert to check if the event was already sent 
      retreiveLastValue(id, function(configs) { 
      if (value == configs.value && interval == configs.interval) { 
       console.log("already sent"); 
      }else{ 
       console.log("send alert"); 
      } 
      }); 
     } 
    }); 
} 

しかし、値が30、または60である。そして、サーバは一日一回実行されるので、私はしたい場合は、この場合には、スクリプトのみアラートを送信しますその番号が再び障壁を通過したかどうかを確認する方法を見つけてください。

デモンストレーション:

  • 値が29のとき - >
を警告しないでください - >値が31である場合には29 30から
  • からの移行時に
  • サーバーをダウン警告しないでください。

    この問題を防ぐスクリプトを作成するにはどうすればよいですか?

    ありがとうございます。代わりvalueintervalの正確な倍数である場合value % interval、すなわちモジュロ、確認の

  • +0

    私は...あなたが望むものを正確にわからない...何が起こる必要があることは、サーバがその遷移中にダウンしているのですか? – Jordumus

    +0

    すべてのユーザーセッションで値が0から始まっていますか?すでに送信されたアラートのカウンタを保持することができます。次に、if(Math.floor(value/interval)> alertsCount){sendAlert();をチェックします。 alertsCount + = 1} ' – pawel

    +0

    これは何か? https://jsfiddle.net/84n8wd4b/ 'value'は、範囲1 ... 3のランダムな値でインクリメントして、中断された接続をシミュレートするか、または値が正確な倍数をスキップする理由が何であるかをシミュレートします。このアイデアは、「間隔」の倍数を越えるとすぐに警告を送信することです。 – pawel

    答えて

    0

    を使用すると、値が少なくともn * intervalあるかどうかを確認するために分割Math.floor(value/interval) = nを使用することができ、0です。このnも送信する必要があるアラートの数なので、nが送信されたアラートの数(つまり、別の複数の番号が交差している)より大きいとアラートを追跡して新しいアラートを発行します。

    var alertCount = 0; 
    function validateValue(id, interval) { 
        //Callback that returns me the present value 
        retreiveValue(id, function(value) { 
          if(Math.floor(value/interval) > alertCount){ 
           sendAlert(value); 
           alertCount += 1; 
          } 
        }); 
    } 
    

    Demo on jsfiddle

    関連する問題