почему функция в setTimeout выполняется дважды?

Функция, вызываемая в setTimeout, срабатывает с нужными промежутками, но каждый раз выполняется дважды. При этом правильно обновляет счетчик, каждый раз увеличивая его на единицу. Почему дважды?

Примечание: inform - самописная функция, отправляющая сообщения разными каналами.

async function serviceOAuth() {
  const { expiresAt } = await getOAuth();
  const delay = expiresAt - Date.now() - 1000;
  inform(`Обновим oAuth ${new Date(expiresAt)}`, 'info');
  let counter = 0;

  let timeId = setTimeout(async function renewToken() {
    const { expires_in: expiresIn } = await getOAuth();
    const timer = expiresIn * 1000;
    counter += 1;
    inform(`Обновление oAuth #${counter}`, 'info');
    inform(`Следующее обновление ${new Date(Date.now() + timer)}`, 'info');
    clearTimeout(timeId);
    timeId = setTimeout(renewToken, timer);
  }, delay);
}

Ответы (0 шт):