我正在尝试创建一个无限循环,该循环在视频上传时停止。该函数工作正常,但是停止循环似乎不起作用。我得到的错误是:
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 ...”
答案 0 :(得分:2)
Tl; Dr
您应该只使用setTimeout
和clearTimeout
。
问题的小结似乎是您要使用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;
的原因。但这主要是没有意义的。您应该只使用setTimeout
和clearTimeout
。
顺便说一句clearImmediate
does exist,但是它还是非标准的,并且没有得到很好的支持。
答案 1 :(得分:1)
JavaScript中没有名为clearImmediate
的函数。
要清除超时,请使用clearTimeout
。
所以
使用
window.clearTimeout(immediateId);
代替
window.clearImmediate(immediateId);