Почему я получаю сообщение об ошибке 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);
Другие вопросы по тегам