警报用户,如果数字是30的倍数

时间:2017-10-31 10:28:33

标签: javascript

我的数据库中有一个具有特定值的行。有一个系统会自动增加该值,该值不是恒定的。

我需要构建一个脚本,每当这个值达到30的倍数时就会提醒用户。

演示:

  • 当值为30时 - >警报
  • 当值为45时 - >不要提醒
  • 当值为60时 - >警报

每次用户收到提醒时,我都会将事件记录在数据库中,以获取数据历史记录。

此脚本将在Node 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时 - >不要提醒
  • 服务器在从29转换为30
  • 期间停机
  • 当值为31时 - >不要提醒

如何构建可以防止此问题的脚本?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用除法value来检查intervalvalue % interval的确切倍数,而不是检查0的确切倍数是Math.floor( value / interval ) = n。该值至少为n * interval。此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