JavaScript 函数的执行可以被中断吗?
Can JavaScript function execution be interrupted?
有一个对象来存储数据。
var store = {
elements: [],
eventsEnabled: true,
addElement: function(element) {
this.elements.push(element);
if (this.eventsEnabled) {
// Code that triggers event, calls handlers... whatever
}
}
};
存储数据的行为来自两个事件(有点像两个生产者)。 第一个"生产者"不会触发任何事件:
setInterval(function() {
store.eventsEnabled = false;
store.addElement('hello');
store.eventsEnabled = true;
}, 12000);
第二个触发事件:
setInterval(function() {
store.addElement('bye');
}, 7000);
问题是,第二个生产者可以打破第一个生产者的执行流程吗?
我的意思是,如果生产者 1 禁用事件,并且在完成执行之前(因此在再次启用事件之前),生产者 2 开始执行并添加其元素,则不会触发任何事件。 这可能吗? 这能发生吗?
如果是这样,如何将此代码转换为线程安全代码?
JavaScript 是单线程的。 功能不能中断,因此您可以确保每个功能块在另一个功能块开始之前完成。
(但是,如果函数进行异步调用,则其他函数可能会在异步操作开始之前执行。 不过,除了setTimeout
调用之外,我可以看到这不会发生在您的代码中,您可以确定这些调用将以正确的顺序执行。
将
eventsEnabled
作为参数传递给addElement
方法不是更明智吗?
var store = {
elements: [],
addElement: function(element,eventsEnabled) {
this.elements.push(element);
if (eventsEnabled) {
// Code that triggers event, calls handlers... whatever
}
}
};
第一:
setInterval(function() {
store.addElement('hello',false);
}, 12000);
第二:
setInterval(function() {
store.addElement('bye',true);
}, 12000);
除了@Jamiec的建议之外,您还可以考虑传入事件函数:
var store = {
elements: [],
addElement: function(element, callback) {
this.elements.push(element);
if (callback !== undefined) {
callback();
// Common code that triggers event, calls handlers... whatever
alert("I'm Common Event Code");
}
}
};
这样使用:
setInterval(function() {
store.addElement('hello', function(){ alert("I'm Special Event Code!"); });
}, 12000);
因此,如果需要一个事件,你可以把它传入,否则就把它排除在外。
相关文章:
- 递归函数中断
- 从jquery foreach内部中断函数
- JavaScript 函数在 IE9 中随机中断
- Angularjs 与 coffeescript 函数表达式中断
- Javascript:变量中断函数
- return语句在JavaScript中使用而不中断函数
- 调用加载的顺序函数会意外中断代码
- 从匿名函数中中断for循环
- 清除文本区域会中断其他JS函数
- 如何在返回值(Js)时不中断函数/循环
- 进度条函数在一次调用后中断
- 一个函数在另一个函数上中断.可能吗
- 中断 JQuery 设置超时函数
- 在 ASP.NET 页面中内联编码 SVG 会导致 SVG JavaScript 创建 SVGPoint();函数中断
- 从调用/子函数退出/中断主函数
- 在事件上中断函数
- 如果条件不通过,则中断函数
- Javascript:将变量传递给函数会中断函数
- atom美化插件中断函数参数
- 使用getTime的停止/中断函数执行