说我有20行JS代码,我希望解释器仅执行一半代码(< 11行),然后停止,无功能和返回,或者不评论其余代码(我已经尝试了返回,请提前查看)。
第10行中的location.reload(true);
是一个紧密的解决方案,但我正在寻找客户端站。
我的问题
在JavaScript中是否有 stop
命令(或功能),要求解释器停止并表现得好像没有代码运行吗?
为什么我问
这个问题的背景是我在一个以上keydown
事件中调用功能的问题。
给定keydown
事件仅触发一次,我考虑将解释器发送回keydown
事件被触发后触发后的开始,而没有刷新页面(对不起,如果看起来很荒谬,我是JS的新手,并且发现失败了。错误的来源)。
当然,以上问题与"为什么仅一次触发键盘事件"的问题不同,我已经在这里问过 - 这是上下文的链接。
防止XY问题
一方面,我想确保没有XY问题。另一方面,我不允许在此会议上链接到上面的上一个问题。
无论哪种方式,我都会很高兴知道我刚刚描述的内容(JS解释器的客户端停止)甚至在语言的当前版本中都是可能的。
注意:我决定在今天早些时候的一些评论(没有答案)之后仔细地重写这个问题,并且我最好确保该问题是有益的和公共的。
没有停止命令,但是在有长期运行的客户端操作之前,我经历了它的需要。
解决方案:
1)将问题分为小packets
2)确保您能够使function
仅适用于activeMilliseconds
毫秒:
function doStuff(packets, currentIndex, activeMilliseconds) {
var start = new Date(); //Start of chunk
while((currentIndex < packets.length) && (new Date() - start < activeMilliseconds)) {
//Do something with packets[currentIndex]
currentIndex++;
}
return currentIndex;
}
3)现在我们能够为activeMilliseconds
毫秒工作,我们需要异步使用它:
//Define packets
var currentIndex = 0;
var intervalID = setTimeout(function() {
If(currentIndex = doStuff(packets, currentIndex, activeMilliseconds) >= packets.length) clearInterval(intervalID);
}, totalMilliseconds);
节点: TotalMilliseConds> ActiveMilliseConds 应该是正确的。例如,如果totalMilliseconds
为250,而activeMilliseconds
为200,那么在每250毫秒内,块将持续200毫秒,浏览器每250毫秒每250毫秒就可以做50毫秒的东西,即使有很多工作要做。
4)确保工作停止以前的类似工作:
function doJob(packets, intervalID, activeMilliseconds, totalMilliseconds) {
clearInterval(intervalID);
//Define packets
var currentIndex = 0;
var intervalID = setTimeout(function() {
If(currentIndex = doStuff(packets, currentIndex, activeMilliseconds) >= packets.length) clearInterval(intervalID);
return intervalID;
}, totalMilliseconds);
}
如果您将此想法用于关键事件,则它将停止以前的键盘,您最大的等待时间将是ActiveMilliseConds,这在我看来是可以接受的妥协。
也就是说,只有在您没有其他选择的情况下,应使用此方法。您需要知道JavaScript具有一个线程,因此,即使您在事件的先前实例仍在运行时触发函数执行,在另一个事件完成后,您的新事件也将依次执行。