为什么会出现错误clearImmediate未定义?

时间:2020-06-09 11:03:50

标签: javascript loops settimeout setimmediate clearimmediate

我正在尝试创建一个无限循环,该循环在视频上传时停止。该函数工作正常,但是停止循环似乎不起作用。我得到的错误是:

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 个答案:

答案 0 :(得分:2)

Tl; Dr

您应该只使用setTimeoutclearTimeout


问题的小结似乎是您要使用setImmediate。这是一种非标准方法,似乎并未在网络中广泛采用。参见MDN site for this

此功能是非标准功能,不在标准范围内。不要 在面向Web的生产站点上使用它:它不适用于每个人 用户。两者之间也可能存在很大的不兼容性 实施和行为可能会在将来发生变化。

此方法不应成为标准方法,仅是 由Internet Explorer和Node.js 0.10+的最新版本实现。 它遇到了来自Gecko(Firefox)和Webkit的抵制 (Google / Apple)。

此功能看起来像async CPU bound operations一样工作,但webkit和Mozilla不赞成该实现,因此自2011年以来一直处于疲软状态。

它已在node.js中实现。几乎可以肯定,在node.js应用程序中,这比在Web上下文中有意义得多。我推测这就是节点采用它的原因。我还假设您是从node.js链接获得此代码的?

我猜这就是您这样做window.setImmediate = window.setTimeout;的原因。但这主要是没有意义的。您应该只使用setTimeoutclearTimeout

顺便说一句clearImmediate does exist,但是它还是非标准的,并且没有得到很好的支持。

答案 1 :(得分:1)

JavaScript中没有名为clearImmediate的函数。

要清除超时,请使用clearTimeout

所以

使用

window.clearTimeout(immediateId);

代替

window.clearImmediate(immediateId);