【问题标题】:Why am I getting the error clearImmediate is not defined?为什么我收到错误 clearImmediate 未定义?
【发布时间】:2020-09-28 13:00:13
【问题描述】:

我正在尝试制作一个在上传视频时停止的不定式循环。该功能工作正常,但是停止循环似乎不起作用。我得到的错误是:

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...”会触发

【问题讨论】:

  • window.clearImmediate 应该是window.clearTimeout
  • 没有clearImmediate - 你需要使用clearTimeout。或者像使用setImmediate 一样为其设置别名。不过,不知道你为什么这样做。

标签: javascript loops settimeout setimmediate clearimmediate


【解决方案1】:

Tl;博士

您应该只使用setTimeoutclearTimeout


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

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

此方法预计不会成为标准,仅 由 Internet Explorer 和 Node.js 0.10+ 的最新版本实现。 它遇到了 Gecko (Firefox) 和 Webkit 的阻力 (谷歌/苹果)。

它看起来像 async CPU bound operations 一样工作,但 webkit 和 Mozilla 不同意该实现,因此自 2011 年以来它一直在萎靡不振。

它已在 node.js 中实现。几乎可以肯定,这在 node.js 应用程序中比在 Web 环境中更有意义,我想这就是 node 采用它的原因。我还假设您是从 node.js 链接获得此代码的?

我猜这就是你为什么要做window.setImmediate = window.setTimeout;。但这大多是没有意义的。你应该只使用setTimeoutclearTimeout

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

【讨论】:

  • 感谢 Liam 的精彩解释,代码确实有效,并且能够摆脱 window.setImmediate = window.setTimeout;想法确实来自 node.js
【解决方案2】:

Javascript 中没有名为clearImmediate 的函数。

而不是清除超时有clearTimeout

所以,

使用

window.clearTimeout(immediateId);

代替

window.clearImmediate(immediateId);

【讨论】:

猜你喜欢
  • 2012-01-30
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多