Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выполнение функции с промежутком времени. (https://javascript.ru/forum/misc/75723-vypolnenie-funkcii-s-promezhutkom-vremeni.html)

Artur_Hopf 01.11.2018 11:47

Выполнение функции с промежутком времени.
 
Добрый день. Есть функция которая сравнивает время.
В функции если время превышает заданное, отправляется post запрос на сервер.
Вот функция, она обновляется с интервалом в 10 секунд:
var check = true;

function downtime (d1, d2){
    //d1 это время, например 2018-11-01 11:41:53
    //d2 это текущее время сервера
    d1 = new Date(Date.parse(d1));  //преобразуем строку
    d2 = new Date(Date.parse(d2)).getTime();
    var min15 = d1.setSeconds(d1.getSeconds() + 900);  //прибавляем к времени 15 минут
     //check становится false во время другого условия
     if(min15 <= d2 && check == false){
           check = true;
           $.post( "index.php");
     }
     
}


Сам вопрос, как отправлять post запрос только по одному разу если время так же превышает 30 минут и 60 минут.

Например вот так, но это я так понимаю не правильно обращаться так к check:
var check = true;

function downtime (d1, d2){
    d1 = new Date(Date.parse(d1));
    d2 = new Date(Date.parse(d2)).getTime();
    var min15 = d1.setSeconds(d1.getSeconds() + 900); 
    var min30 = d1.setSeconds(d1.getSeconds() + 1800); 
    var min60 = d1.setSeconds(d1.getSeconds() + 3600); 

     if(min15 <= d2 && min30 >= d2 check == false){
           check = true;
           $.post( "index.php");
     }
     if(min30 <= d2 && min60 >= d2 check == true){
           check = false;
           $.post( "index.php");
     }

     if(min60 <= d2 &&  check == false){
           check = true;
           $.post( "index.php");
     }
     
}


Подскажите как правильно сделать отправку post запроса если эта функция обновляется раз в 10 секунд?:-?

laimas 01.11.2018 12:17

Ну так если задано по времени, то достаточно проверить условие по нему и соответственно отправлять или нет запрос. Никаких флагов для этого не нужно. Зачем время прибавлять (в первой функции)?

Artur_Hopf 01.11.2018 12:57

Ну вот у меня функция каждые 10 секунд тащит это время с сервера, и передает в эту функцию, где происходит сравнение.

логика такая:

прошло 10 секунд

вызвали функцию смотрим время, ага условие сработало отправляем запрос (первое время меньше текущего времени, мы прибавляем к нему 15 минут потому что оно всегда меньше текущего времени, изначально)

прошло 10 секунд

условие снова выполнено, но запрос мы же уже отправляли, его не нужно отправлять (check == true оно не выполнится)

прошло 10 секунд ....(повторяется бесконечно)

прошло 30 минут после первой отправки

значение b1 не изменилось, после прибавки к нему 30 минут нужно снова отправить запрос

И вот тут у меня проблема как это сделать, на уме только оперировать check :-?

laimas 01.11.2018 13:47

Ничего не понял. Есть периоды два условия более 30 или более 60 минут, и если условие выполняется, то запрос, так?
Ну а к чему арифметика с 15 минутами?
Каждые десять секунд опрашивается время, если запрос не выполнялся не разу, значит видимо запрашиваем и время запроса запоминаем. Затем это время сравниваем с текущим определяя более 30 или 60, если более, запрашиваем и сохраняем время запроса, и т.д.

PS. А зачем более 60, ведь до этой проверки так и не дойдет?


Часовой пояс GMT +3, время: 04:31.