2017-10-31 1 views
2

데이터베이스에 특정 값이있는 행이 있습니다. 값을 자동으로 inscrements하는 시스템이 있습니다. 값은 일정하지 않습니다.숫자가 30의 배수이면 경고 사용자

는 그리고 나는 그것이

(30)

의 다수의 때마다이 값을 사용자에게 알려주는 스크립트를 구축 할 필요가 데모 :
  • 값이 30

    -> 경고
  • 값이 45 - > 값이 60 인 경우
  • 을 경고하지 마십시오 - 경고
  • 매번 사용자가 경고를 수신

> 데이터를 기록하기 위해 데이터베이스에 이벤트를 기록합니다.

이 스크립트는 적어도 하루에 한 번 실행되는 노드 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입니다 그리고 서버가 하루에 한 번 실행하기 때문에, 내가 좋아하면이 경우, 스크립트는 경고를 보낼 것입니다 번호가 장벽을 다시 통과했는지 확인하는 방법을 찾아보십시오.

데모 : - 값이 31 인 경우> 30

  • -29에서 전환하는 동안
  • Server를 알림 표시하지 마십시오 - 값이 29 인 경우

    • > 경고하지 마십시오

    이 문제를 방지하는 스크립트를 어떻게 만들 수 있습니까?

    감사합니다. 대신 valueinterval의 정확한 배수, 즉 모듈 value % interval 당신은 값이 최소한 n * interval을인지 확인합니다 부문 Math.floor(value/interval) = n를 사용할 수 0 인 경우 검사

  • +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은 전송해야하는 알림 수이기도하므로 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

    관련 문제