Задача 1
Неверный способ использования setTimeout
.
Первый аргумент, который должен быть передан seTimeout
, должен быть функцией.В вашем коде вы передаете undefined
:
setTimeout(this.previewTrailerVideo(showState), 1000);
Поскольку функция previewTrailerVideo
ничего не возвращает, что означает undefined
.
Другими словами, ваш setTimeout
неработает на всех.Это означает, что ошибка, которую вы получаете, не из setTimeout
.
Задача 2
Ошибка, которую вы получаете, на самом деле от того, как вы используете setTimeout
(но не setTimeout
сам).В той же строке:
setTimeout(this.previewTrailerVideo(showState), 1000);
Хотя setTimeout
не вызывается должным образом, ваша рекурсия работает отлично (вот где возникает ошибка), потому что в этой строке вы на самом деле вызываете Ваша функция, снова и снова, когда showState === true
.
Решение
Просто отредактируйте эту строку в:
setTimeout(this.previewTrailerVideo.bind(this, showState), 1000);
Читать о.bind
для подробностей.
Короче говоря, метод .bind
не будет вызывать вашу функцию, но будет передавать аргументы в вашу функцию и возвращать вашу функцию с этими аргументами уже внутри.
Используя .bind
, вы теперь передаете предполагаемую функцию в setTimeout
(проблема 1), а также прекращаете повторение (проблема 2).