为何出现clearImmediate is not defined错误?视频上传循环停止失败
问题分析与解决方案
你遇到的clearImmediate is not defined报错根源很清晰:你只把window.setImmediate映射成window.setTimeout来启动循环,但没有给clearImmediate做对应的映射——多数现代浏览器没有原生的clearImmediate方法,调用它自然会报错。
另外你的循环逻辑还有个小瑕疵:你先调用setImmediate(loop)再判断是否停止,这会导致即使videoIsUploaded已经为true,当前这一次调用已经触发了下一轮循环,可能会多打印一次still uploading。
修正后的完整代码
// 同时映射setImmediate和clearImmediate到setTimeout/clearTimeout window.setImmediate = window.setTimeout; window.clearImmediate = window.clearTimeout; var videoIsUploaded = false; var immediateId; function loop() { console.log('still uploading'); // 先判断上传状态,再决定是否开启下一轮循环 if (!videoIsUploaded) { immediateId = setImmediate(loop); } else { HideTheUpload(); } } loop(); function HideTheUpload(){ document.getElementById("AddVideo").style.display = "none"; }
关键修改点
- 新增
window.clearImmediate = window.clearTimeout;:既然用setTimeout模拟了setImmediate的行为,清除时必须用对应的clearTimeout来匹配。 - 调整循环逻辑顺序:先检查上传状态,再决定是否继续循环,避免不必要的多余执行。
这样当Azure完成上传设置videoIsUploaded = true后,循环会在当前轮次结束后正常停止,同时不会再抛出clearImmediate未定义的错误。
内容的提问来源于stack exchange,提问作者Ewald Bos
相关产品推荐
相关产品推荐

