Я использую setTimeout неэффективным способом?

Условие протокола неверно. Вы должны использовать:

extension Camera where Self: UIViewController {
2
задан mwilson 19 January 2019 в 05:09
поделиться

2 ответа

Я не знаю, каков эффект от производительности многих вызовов setTimeout, но я бы предпочел установить timeAgo как объект даты, а затем проверять разницу между now и этим объектом даты при каждом обновлении пользовательского интерфейса. :

export interface IQuestion {
  createdAt: Date;
}

export class Question implements IQuestion {
  public createdAt: Date;
  constructor(question: IQuestion) {
    this.createdAt = new Date();
  }

  getAge(): String {
    return (new Date() - this.createdAt).toSomeStringAccordingToAge()
  }
}

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

0
ответ дан Zach Smith 19 January 2019 в 05:09
поделиться

Хорошо, newQuestion и первые setTimeout - это всего лишь шаблонный код, чтобы заставить что-то работать для тестирования. Пожалуйста, игнорируйте. Второй setInteval - то, где мы смотрим на наш атрибут data. Этот атрибут соответствует стандарту HTML. и могут быть доступны через [HTMLElement].dataset. Мы проверяем время нашей публикации против текущей. В одном методе.

const newQuestion = () => {
  let target = document.querySelector('.questions');
  let question = document.createElement('div');
  question.className = 'question';
  question.setAttribute('data-question-date', Date.now());
  question.innerHTML = '<span>Test Question - <span><span class="age">Just Now</span>';
  target.appendChild(question);
  
};

document.addEventListener('DOMContentLoaded', () => {
  setInterval(() => {
    newQuestion();
  }, 5000); 
  
  setInterval(() => {
    let questions = document.querySelectorAll('.question');
    questions.forEach(q => {
      let dateofQ = q.dataset.questionDate;
      let age = Math.floor((Date.now() - dateofQ)/1000);
      console.log(`age: ${age}`); 
      let ageElement = q.querySelector('.age');
      //do just 20 secs, so we don't have to wait.
      if(age < 20) {
        ageElement.innerHTML = 'Just now';
      } else if (age < 300) {
        ageElement.innerHTML = 'Less than 5 minutes ago.';
      } else {
        ageElement.innerHTML = 'More than 5 minutes ago.';
      }
    });
    
  }, 1000);
});
<div class="questions">


</div>

0
ответ дан Bibberty 19 January 2019 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: