prettier - это одно, eslint - это другое, если у тебя prettier подключается через  eslint, то настройки для него указываются скопом, условно так:rules: {
    'prettier/prettier': ['warn', {
      semi: false,
      ...
      singleQuote: true,
      vueIndentScriptAndStyle: true,
      arrowParens: 'avoid',
      trailingComma: 'none',
      quoteProps: 'consistent',
    }],      const dateA = new Date('...')
const dateB = new Date('...')
// разница в секундах с точностью до миллисекунды
const differenceInSeconds = (dateA.getTime() - dateB.getTime()) / 1000
// затем можно или отбросить дробную часть
console.log(Math.trunc(differenceInSeconds))
// или округлить одним из методов
console.log(Math.round(differenceInSeconds))let lastReqDate
app.get('/api/v1/example', (req, res) => {
  const date = new Date()
  let diff
  if (lastReqDate != null) {
    diff = (date.getTime() - lastReqDate.getTime()) / 1000
  }
  if (diff != null && diff < 120) {
      diff = Math.ceil(diff) // округление до ближайшего большего целого
      res.header('Retry-After', diff)
      res.status(429) // Too Many Requests
      res.send({ retryAfter: diff })
  } else {
      lastReqDate = date
      // выполнение запроса разрешено
  }
})      
  
  Вот так уже работаетНу где же оно работает, если у вас 3 раза вывелось undefined и один раз массив? Просто вы перестаёте обращаться к несуществующему свойству и код не падает на первой же итерации. Однако никакой массив ничем не становится, такое значение туда и пришло. Ещё один вариант - this в момент исполнения указывает уже не на объект класса.
(this.listeners || []).forEach(...)      
  
  <li>по дата-атрибуту и добавляйте в его ol. notes всё что душе угодно.const li = document.querySelector('#id-li')
const input = li.querySelector('input')