Как обратиться к внешней переменной из функции в setTimeout

Рейтинг: 0Ответов: 1Опубликовано: 06.04.2023

Код выглядит примерно вот так:

  () => {
    let delay = 1000;
    
    let timerId = setTimeout(function request() {
      Promise.all(
      // здесь что-то делаем
      )
        .then(() => {
        // и здесь хотим перезапустить setTimeout вот таким путем
        timerId = setTimeout(request, delay)
        })
     }, delay)
   }

VS Code говорит, что timerId объявлен, но нигде не используется. При этом к delay у него претензий нет.

В чём проблема с видимостью timerId? Как перезапустить setTimeout?

Ответы

▲ 1Принят

С timerId проблем нет, но в вашем случае оно вообще ни к чему, т. к. вы нигде его не используете, а только присваиваете.

Скажем, на такой код VS Code ругаться не будет:

() => {
    let delay = 1000;
    
    let timerId = setTimeout(function request() {
      Promise.all(
      // здесь что-то делаем
      )
        .then(() => {
        // и здесь хотим перезапустить setTimeout вот таким путем
        timerId = setTimeout(request, delay)
        })
     }, delay);
    
     console.log('timerId', timerId);
}

Результат создания таймера нужен лишь если вы хотите его подчищать потом через clearTimeout. Если вам оно не надо, то и присваивание в timerId не нужно.