Будет ли забиваться память при таком коде и правильно ли организован класс?

Подскажите правильно ли организован псевдо код? И будут ли утечки памяти при setInteraval или сборщик будет вовремя все очищать и ничего не засорится?

По всевдо задаче нужно отправлять новые блоки каждую минуту на сервер. В методе create блоки могут возвращаться каждый раз разные.
class Block {
  constructor(color) {
    this._currentBlock = null;
    this.color = color || '';
  }

  current() {
    return this._currentBlock;
  };

  create() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        this._currentBlock = {type: 'Brick', color: this.color};
        return resolve(this._currentBlock);
      },0);
    });
  };

  prepareForSend(block) {
    return block.color = block.color.toUpperCase();
  };

  send(block) {
    fetch('http://test.com', {
      method: 'POST',
      body: JSON.stringify(block),
    })
    .catch(console.log)
  }

  init() {
    setInterval(() => {
      const block = new Block();
      block.create().then(r => {
        const preparedBlock = block.prepareForSend(block.current());
        block.send(preparedBlock);
      });
    }, 10000);
  }
}

const block = new Block();
block.init();


Обновленный вариант класса

class Block {
  constructor(color) {
    this.color = color || '';
  }

  create() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        return resolve({type: 'Brick', color: this.color});
      },0);
    });
  };

  prepareForSend(block) {
    return block.color = block.color.toUpperCase();
  };

  initSending() {
    setInterval(() => {
      this.create().then(block => {
        const preparedBlock = this.prepareForSend(block);
        send(preparedBlock);
      });
    }, 10000);
  }
}

function send(block) {
  fetch('http://test.com', {
    method: 'POST',
    body: JSON.stringify(block),
  })
  .catch(console.log)
}

const block = new Block();
block.initSending();
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
lazalu68
@lazalu68
Salmon
Может остальным все понятно, а для меня тут какая-то сатана необъяснимая происходит. Если отбросить глобальные вопросы типа "зачем нужно чтоб блок посылал себя сам" и "почему функция отправки не реализована вне класса", то остаётся еще много:
1. Зачем в create вообще таймаут,
2. Зачем в экземпляре хранится current_block?
3. Зачем еще один блок создаётся в init?
4. Вопрос связан с предыдущим: зачем нужно внутри метода класса создавать еще один экземпляр этого класса?
5. Зачем create отдаёт current_block который нигде не используется?

Отвечая на ваш вопрос: я вижу тут кучу вроде как лишних действий, но не вижу ничего, что бы не мог собрать GC. Есть какие-то конкретные причины думать, что GC не справится? Собственно, я даже проверил (это можно сделать за несколько секунд из консоли), память не забивается

ЗЫ: если отвечаете, то нажимайте кнопку "ответить", а то я ваш ответ чисто случайно заметил. И код лучше закатать либо в спойлеры, либо в интерактивные примеры в песочнице (codepen, jsfiddle).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 18:16
1000 руб./за проект
28 мар. 2024, в 18:15
90000 руб./за проект
28 мар. 2024, в 18:05
5000 руб./за проект