Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2019, 10:59
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 154

Запуск большого количества таймеров.
По очереди через разный промежуток времени срабатывает таймер и стучится в нужные мне функции.
Я это реализовал так. Всего таких таймеров около 10.
setTimeout(function () {
     console.log('test1');
}, 10500);
setTimeout(function () {
     console.log('test3');
}, 14500);
setTimeout(function () {
     console.log('test');
}, 15000);


Подскажите как этот код сделать более красивым.
Ответить с цитированием
  #2 (permalink)  
Старый 03.06.2019, 11:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,502

dima85,
class Timer {
    constructor(data) {
    this.data = data.map(obj => ({...obj,beginTime : performance.now()}));
    requestAnimationFrame(this.loop.bind(this));
    }
    loop(time){
      this.data = this.data.filter(({beginTime,duration,fn}) => {
         const end = time - beginTime >= duration;
         if(end) {
           fn()
         }
         else return true
      })
      this.data.length && requestAnimationFrame(this.loop.bind(this))
    }

    }
    new Timer([
    {duration : 10500, fn : ()=> console.log('test1')},
    {duration : 14500, fn : ()=> console.log('test3')},
    {duration : 15000, fn : ()=> console.log('test')},
    ])

Последний раз редактировалось рони, 05.06.2019 в 12:16.
Ответить с цитированием
  #3 (permalink)  
Старый 05.06.2019, 10:49
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 154

Спасибо!
Подскажите как в new Timer([]); добавить значения с переменной.
Есть файл test.txt в нем:
{duration : 10500, fn : ()=> console.log('test1')},
{duration : 14500, fn : ()=> console.log('test3')},
{duration : 15000, fn : ()=> console.log('test')},



Я его подгружаю на страницу примерно так, в переменную responses у меня попадает все с test.txt
И далее я пытаюсь это вставить в Timer, но видимо responses надо как-то сказать что в нем массив а не простой текс. Подскажите как это сделать.
ajax.get('test.txt',{},function(responses){
     new Timer([responses]);
    },true);
Ответить с цитированием
  #4 (permalink)  
Старый 05.06.2019, 11:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,502

Сообщение от dima85
test.txt
может сделать json и тогда new Timer(responses);
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2019, 12:16
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 154

Хорошо, тогда нам надо немного поменять файл, например на такой:
[{"duration" : 10500, "console":"test1"},
{"duration" : 14500, "console":"test3"},
{"duration" : 15000, "console":"test"}]


Далее:
ajax.get('test.txt',{},function(responses){
     new Timer(JSON.parse(responses));
    },true);


А как здесь?:
class Timer {
    constructor(data) {
    this.data = data.map(obj => ({...obj,beginTime : performance.now()}));
    requestAnimationFrame(this.loop.bind(this));
    }
    loop(time){
      this.data = this.data.filter({beginTime,duration,fn} => {
         const end = time - beginTime >= duration;
         if(end) {
           fn() //?????
         }
         else return true
      })
      this.data.length && requestAnimationFrame(this.loop.bind(this))
    }

    }
Ответить с цитированием
  #6 (permalink)  
Старый 05.06.2019, 12:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,502

dima85,
class Timer {
    constructor(data) {
    this.data = data.map(obj => ({...obj,beginTime : performance.now()}));
    requestAnimationFrame(this.loop.bind(this));
    }
    loop(time){
      this.data = this.data.filter(({beginTime,duration,fn}) => {
         const end = time - beginTime >= duration;
         if(end) {
           fn()
         }
         else return true
      })
      this.data.length && requestAnimationFrame(this.loop.bind(this))
    }

    }

    let responses = `{duration : 10500, fn : ()=> console.log('test1')},
    {duration : 14500, fn : ()=> console.log('test3')},
    {duration : 15000, fn : ()=> console.log('test')}`
    responses = eval(`[${responses}]`)
    new Timer(responses)
Ответить с цитированием
  #7 (permalink)  
Старый 05.06.2019, 12:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,502

dima85,
class Timer {
    constructor(data) {
    this.data = data.map(obj => ({...obj,beginTime : performance.now()}));
    requestAnimationFrame(this.loop.bind(this));
    }
    loop(time){
      this.data = this.data.filter(({beginTime,duration,"console" : txt}) => {
         const end = time - beginTime >= duration;
         if(end) {
           console.log(txt)
         }
         else return true
      })
      this.data.length && requestAnimationFrame(this.loop.bind(this))
    }

    }

    let responses =
[{"duration" : 10500, "console":"test1"},
{"duration" : 14500, "console":"test3"},
{"duration" : 15000, "console":"test"}]
    new Timer(responses)
Ответить с цитированием
  #8 (permalink)  
Старый 05.06.2019, 12:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,502

dima85,
обратите внимание, строка 7 исправлена везде!!!
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заполнение большого количества веб-элементов Giku Angular.js 2 25.05.2017 20:53
передача большого количества переменных из PHP в JS dasser Элементы интерфейса 51 29.03.2017 15:49
Запуск скрипта во всех вкладках браузера через console Nyiann Javascript под браузер 3 06.02.2017 23:22
Обработка большого количества web-страниц Manyasha AJAX и COMET 11 22.05.2016 17:48
Ajax передача большого количества данных diakon AJAX и COMET 3 29.05.2015 13:23