Эта функция ниже не работает так, как я хочу; будучи новичком JS, я не могу понять, почему.
Мне нужно подождать 5 секунд, прежде чем проверять, newState
есть ли -1
.
В настоящее время он не ждет, он просто проверяет сразу.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
javascript
dom-events
copyflake
источник
источник
Ответы:
Вы должны поместить свой код в функцию обратного вызова, которую вы предоставляете
setTimeout
:Любой другой код будет выполнен немедленно.
источник
Вы действительно не должны этого делать , правильное использование тайм-аута является подходящим инструментом для решения проблемы ОП и любого другого случая, когда вы просто хотите запустить что-то через определенный промежуток времени. Джозеф Силбер хорошо показал это в своем ответе. Однако, если в каком-то непроизводственном случае вы действительно хотите повесить основной поток на некоторое время, это будет сделано.
С исполнением в виде:
Я приехал сюда, потому что я создавал простой тестовый пример для упорядочения сочетания асинхронных операций вокруг длительных операций блокировки (т. Е. Дорогостоящей манипуляции с DOM), и это моя операция имитации блокировки. Это хорошо подходит для этой работы, поэтому я решил опубликовать ее для всех, кто прибывает сюда с аналогичным сценарием использования. Тем не менее, он создает объект Date () в цикле while, который может сильно перегружать GC, если он выполняется достаточно долго. Но я не могу особо подчеркнуть, это подходит только для тестирования, для создания любой реальной функциональности вы должны обратиться к ответу Джозефа Силбера.
источник
Вот решение с использованием нового синтаксиса async / await .
Обязательно проверьте поддержку браузера, так как это новая функция, представленная в ECMAScript 6.
Вспомогательная функция:
Использование:
Преимущество этого подхода в том, что он делает ваш код похожим на синхронный код.
источник
Используйте функцию задержки как это:
Использование:
Кредиты: Как отложить обработчик .keyup (), пока пользователь не перестанет печатать?
источник
Вы не должны просто пытаться сделать паузу в 5 секунд в JavaScript. Это не работает таким образом. Вы можете запланировать выполнение функции кода через 5 секунд, но вы должны поместить код, который вы хотите запустить позже, в функцию, а остальная часть кода после этой функции продолжит работать немедленно.
Например:
Но если у вас есть такой код:
console.log()
Заявление будет работать сразу. Он не будет ждать, пока не истечет время ожидания вstateChange()
функции. Вы не можете просто приостановить выполнение JavaScript на заранее установленное время.Вместо этого любой код, который вы хотите запустить с задержками, должен быть внутри
setTimeout()
функции обратного вызова (или вызываться из этой функции).Если вы попытаетесь «сделать паузу» зацикливанием, то вы по существу «повесите» интерпретатор Javascript на некоторое время. Поскольку Javascript запускает ваш код только в одном потоке, когда вы зацикливаетесь, ничто другое не может выполняться (никакие другие обработчики событий не могут быть вызваны). Таким образом, циклическое ожидание изменения какой-либо переменной никогда не будет работать, потому что никакой другой код не может быть запущен для изменения этой переменной.
источник
var t = new Date().getTime(); while (new Date().getTime() < t + millisecondsToLockupBrowser);
Если вы находитесь в асинхронной функции, вы можете просто сделать это в одной строке:
Обратите внимание , что если целью является NodeJS, будет более эффективно использовать это (это предопределенная обещанная функция setTimeout):
источник
Попробуй это:
источник
Лучший способ создать такую функцию для ожидания в миллисекундах, эта функция будет ожидать миллисекунды, указанные в аргументе:
источник
Это решение взято из документации React Native для управления обновлением :
Чтобы применить это к вопросу ОП, вы можете использовать эту функцию в координации с
await
:источник
Основываясь на ответе Джозефа Силбера , я бы сделал это немного более обобщенно.
Вы бы получили свою функцию (давайте создадим ее на основе вопроса):
И вы могли бы иметь функцию ожидания:
В конце у вас будет:
Это решение, я бы предпочел не использовать аргументы в функции ожидания (чтобы иметь только
foo();
вместоfoo(arg);
), но это для примера.источник
Вы можете добавить задержку, внеся небольшие изменения в вашу функцию (async и await).
источник
используя angularjs:
источник
Создать новую функцию Js
Вызывайте функцию, если вы хотите отложить выполнение. Используйте миллисекунды в int для значения задержки.
источник
Я использовал его для запуска компьютерных игр от края или IE. И он самозакрывается IE Edge через 7 секунд.
Firefox и Google Chrome не могут быть использованы для запуска игр таким образом.
источник