Таймаут захвата установленного времени из внутренней библиотеки?

Я работаю с React.js в браузере. И в настоящее время у нас есть библиотека, которая работает со слайдером, у которого есть внутренний setTimeout.

Я хотел бы сделать

window.cleartimeout(ID from internal library set timeout)

Есть ли способ получить тайм-ауты текущей страницы и очистить последний примененный тайм-аут, не обращаясь к библиотеке с запросом на включение, чтобы раскрыть этот идентификатор?

Нет. Вам нужно будет получить ссылку на возвращенный обработчик тайм-аута setTimeout.

Sergiu Paraschiv 08.11.2018 15:09

Это очень плохо, я подумал, что это может быть проблемой, с которой многие люди сталкивались раньше, и контроль над таймерами или эффектами, предоставляемыми из библиотеки, должен быть чем-то, с чем страница должна позволять мне работать ... так же, как я делаю окно .document.body, и я обращаюсь к телу, я должен иметь возможность сказать window.document.timers и получить хотя бы таймеры в стеке

juan garcia 08.11.2018 15:14

Вы всегда можете инициализировать window.timers = [], а затем window.timers.push(setTimeout(...)). Хотя причина, по которой это еще не сделано, заключается в том, что сохранение ссылки на такой таймер потенциально может привести к тому, что большая часть больше не используемой памяти никогда не будет собрана в мусор. Также как определить таймер который для остановки? Если вы сделаете это явно, то у вас есть шанс придумать схему именования.

Sergiu Paraschiv 08.11.2018 15:18

Что ж, да, я понимаю вашу точку зрения, но опять же, сбор мусора / схемы или способы определения того, кто предоставил слушателя, - это то, что мы тоже можем проверить. То есть с простой кнопкой этого не происходит? у вас также есть button.events, и вы можете увидеть там событие ... но я не вижу чего-то подобного в случае с таймерами. И я думаю, что это связано с утечками памяти или ошибками, когда что-то поступает из библиотек ... Мы должны уметь справляться с этими ситуациями без утечки памяти или ошибок ...

juan garcia 08.11.2018 15:30

@SergiuParaschiv setTimeout возвращает идентификатор, а не ссылку на таймер. Проблем с сборщиком мусора не будет.

Oram 08.11.2018 15:32

@Oram Действительно, это удостоверение личности, а не ссылка, моя беда.

Sergiu Paraschiv 08.11.2018 15:36
Поведение ключевого слова "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
6
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Можно переписать функцию setTimeout.

window.timers = [];
window._setTimeout = window.setTimeout;
window.setTimeout = function(f, delay) {
    window.timers.push(window._setTimeout(f,delay));
};

Это даст вам список идентификаторов таймеров (это не остановит сборку таймеров).

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

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

juan garcia 08.11.2018 15:32

Может ты и прав, что он должен выйти из коробки. Но по крайней мере мы можем быть счастливы, что решение есть.

Oram 08.11.2018 15:34

Я, вероятно, сделаю пиар для библиотеки, чтобы иметь возможность справиться с этим классным способом, но это также возможное решение, которое мне не пришло в голову, может быть, кто-то придет и скажет, что это поддерживается таким образом ... и тогда я буду счастливым человеком.

juan garcia 08.11.2018 15:43

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