Как я могу установить уникальную переменную foreach элемент в массиве с помощью JavaScript? - PullRequest
0 голосов
/ 10 января 2019

Я хочу установить отметку времени для каждого числа, а затем проверить каждую отметку времени чисел по отношению к самому себе.

        var timestamp;
        nums=["1", "2", "3"];
        nums2=nums.map(myFunction);


        function myFunction(num) {

          setInterval(function() {

            var current_time = Math.floor(Date.now() / 1000);

            if (typeof timestamp !== "undefined" ) {
                if (current_time > (timestamp + 60)) {
                    timestamp = Math.floor(Date.now() / 1000);
                    console.log('time stamp reset');
                } else {
                    console.log('time stamp too young will reset after 60 sec');
                }
            } else {
                timestamp = Math.floor(Date.now() / 1000);
                console.log('time stamp set');
            }

         }, 10000);

        }

**** Если я запускаю скрипт в течение 20 секунд: ****

токовый выход:

time stamp set

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

*(10 seconds later)*

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

желаемый результат:

time stamp set

time stamp set

time stamp set

*(10 seconds later)*

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Использование генераторов функций и setInterval

const data = [];
//populate data
for(let i = 0; i < 3; i++){data.push(i)}

function * gen(){
  const timestamp = Date.now();
  let currentTimestamp;
  do{
     currentTimestamp = yield Date.now();
  }while(currentTimestamp - timestamp < 60000);
  return;
}

function run(){
  let iter = gen();
  let t = null;
  let i = 0;
  const res = [];
  const si = setInterval(function(){
    const {done,value} = iter.next(t);
    if(done){
      console.log("60 seconds have gone... reseting...")
      iter = gen();
      //reseting
      i = res.length = 0;
      
    }
    t = value;
    if(i >= data.length){
      console.log("waiting...");
      return;
    }
    console.log("Set timestamp");
    const d = [data[i], value];
    console.log(d);
    res[i++] = d;
  }, 1000);
}

window.onload = run;
0 голосов
/ 10 января 2019

Я не понимаю, что вы пытаетесь сделать здесь, поэтому мой ответ основан исключительно на ваших токовых выходах и желаемых выходах .

Ваша переменная timestamp объявлена ​​в области действия global, поэтому при первом вызове myFunction ее значение равно undefined, но при последующих вызовах она будет содержать некоторое значение, что приведет к вашему текущему выход».

Чтобы исправить это, переместите timestamp переменную внутрь myFunction.

nums=["1", "2", "3"];
nums2=nums.map(myFunction);


function myFunction(num) {
  var timestamp;

  setInterval(function() {

    var current_time = Math.floor(Date.now() / 1000);

    if (typeof timestamp !== "undefined" ) {
        if (current_time > (timestamp + 60)) {
            timestamp = Math.floor(Date.now() / 1000);
            console.log('time stamp reset');
        } else {
            console.log('time stamp too young will reset after 60 sec');
        }
    } else {
        timestamp = Math.floor(Date.now() / 1000);
        console.log('time stamp set');
    }

 }, 10000);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...