Каково хорошее значение по умолчанию для условной установки тайм-аута?

setTimeout возвращает число, timeoutId, которое используется clearTimeout для его идентификации и удаления.

Однако какое значение мне использовать, если я хочу установить тайм-аут условно? Является ли 0 безопасным идентификатором?

Он используется в контексте React, где очистка тайм-аута обычно считается хорошей практикой.

useEffect(() => {
  const timeout = success ? setTimeout(() => foo(), 300) : defaultVal;

  return () => clearTimeout(timeout);
}, [success]);

Или, возможно, лучше обернуть все это одним большим условием и вообще избежать значения по умолчанию?

useEffect(() => {
  if (success) 
    const timeout = setTimeout(() => foo(), 300);
    return () => clearTimeout(timeout);
  }
}, [success]);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, 0 — это безопасное значение для использования, потому что оно никогда не будет возвращено пользователем setTimeout:

... пусть id будет целым числом, определяемым реализацией, которое больше нуля ...

И это не ошибка передать 0 в clearTimeout:

Шаги метода clearTimeout(id) [...] заключаются в том, чтобы удалить эту карту активных таймеров [id].

...

Удаление записи из упорядоченной карты означает удаление из карты всех записей, которые соответствуют заданному условию, или ничего не делать, если ни одна не соответствует.

Но даже несмотря на то, что это безопасно и поддерживается, я обычно использую null для этого случая. Это означает, что мне нужно проверить значение, отличное от null, перед вызовом clearTimeout, но это делает цель кода более понятной.

Я просмотрел спецификацию, но не смог найти раздел о том, что идентификатор не равен нулю, поэтому я подумал, что безопаснее спросить :)

Electric Coffee 24.11.2022 10:19

Другие вопросы по теме