Почему я получаю сообщение об ошибке clearImmediate is not defined?
Я пытаюсь создать бесконечный цикл, который останавливается при загрузке видео. Функция работает нормально, однако остановить цикл, похоже, не получается. Я получаю следующую ошибку:
clearImmediate не определен
это цикл, который я пытаюсь сделать:
window.setImmediate = window.setTimeout; //had to add this for it to start the loop
var videoIsUploaded = false;
var immediateId;
function loop() {
console.log('still uploading');
immediateId = setImmediate(loop);
if (videoIsUploaded == true) {
window.clearImmediate(immediateId);
HideTheUpload();
}
}
loop();
function HideTheUpload(){
document.getElementById("AddVideo").style.display = "none";
}
После того, как Azure загрузит видео, он устанавливает "videoIsUploaded = true", все работает нормально, и срабатывает "if (videoIsUploaded..."
2 ответа
Tl;Dr
Вы должны просто использовать setTimeout
а также clearTimeout
.
Суть вашей проблемы в том, что вы хотите использовать setImmediate
. Это нестандартный метод, который, похоже, не получил широкого распространения в Интернете. См. Для этого сайт MDN:
Это нестандартная функция, которая не соответствует стандартам. Не используйте его на рабочих сайтах, выходящих в Интернет: он подойдет не для всех пользователей. Между реализациями также может быть большая несовместимость, и поведение может измениться в будущем.
а также
Ожидается, что этот метод не станет стандартным, он реализован только в последних сборках Internet Explorer и Node.js 0.10+. Он встречает сопротивление как со стороны Gecko (Firefox), так и со стороны Webkit (Google/Apple).
Похоже, что это предназначено для работы как асинхронные операции, связанные с процессором, но webkit и Mozilla не согласились с реализацией, поэтому она томилась с 2011 года.
Это было реализовано в node.js. Это почти наверняка имеет больше смысла в приложении node.js, чем в веб-контексте, я предполагаю, что именно поэтому node принял его. Я также предполагаю, что вы получили этот код по ссылке node.js?
Я предполагаю, поэтому ты делаешь window.setImmediate = window.setTimeout;
. Но в основном это бессмысленно. Вы должны просто использоватьsetTimeout
а также clearTimeout
.
Кстати clearImmediate
существует, но опять же нестандартно и плохо поддерживается.
В Javascript нет функции с именем clearImmediate
.
Вместо очистки тайм-аута есть clearTimeout
.
Так,
Использовать
window.clearTimeout(immediateId);
Вместо того
window.clearImmediate(immediateId);