如何停止某个函数的进一步执行?我的this问题的答案不能满足我停止/终止函数进一步执行的需要。
我具有这种构造函数的层次结构:
//First Constructor function
function Foo() {
this.foo1 = async function() {
alert("Foo 1 hs bee called");
return true;
}
this.foo2 = async function() {
alert("Foo 2 hs bee called");
return true;
}
}
//Second Constructor function
function Bar() {
var f = new Foo(),
_this = this;
f.foo1().then(function() {
f.foo2().then(function() {
_this.bar1();
})
})
this.bar1 = function() {
alert("Bar 1 hs bee called");
_this.bar2();
}
this.bar2 = function() {
alert("Bar 2 hs bee called");
}
}
exports.module = {
Bar
}
我已经将第二个函数导出为模块,并以这种方式在另一个文件中使用了它:
//Imported Module
const myModule = require("./algorithm");
//Initiating the Bar() constructor
var x = new myModule.Bar();
这是它的工作方式,但更明确地说,所有工作都由Bar()
构造函数完成,该构造函数命中Foo()
构造函数以获取数据。
单击按钮时,我击中Bar()
构造函数,但同时,当所有这些功能开始起作用时,我想随时使用同一页上的另一个按钮终止它。假设一个按钮将启动功能,另一个按钮将停止启动的功能,这是我无法解决的问题。
答案 0 :(得分:0)
我想出了一个解决方案,就像@Jared Smith在评论中提到的那样,我唯一要做的就是添加一个TERMINATE_FUNCTION = false
标记。无论何时单击停止按钮,TERMINATE_FUNCTION
都将设置为true
,并且在Foo()
构造函数中的每个函数上,都会在开始和结束时检查是否TERMINATE_FUNCTION === true
函数的返回时间,并在那里停止函数:
代码是:
//Boolean variable
TERMINATE_FUNCTION = false;
//Listen to event occured
event.on("stopScrapping", function(b) {
TERMINATE_FUNCTION = b;
});
//First Constructor function
function Foo() {
if (TERMINATE_FUNCTION) return;
this.foo1 = async function() {
alert("Foo 1 hs bee called");
if (!TERMINATE_FUNCTION) {
return true;
} else {
return "SCRAPPER_STOPPED";
}
}
this.foo2 = async function() {
if (TERMINATE_FUNCTION) return;
alert("Foo 2 hs bee called");
if (!TERMINATE_FUNCTION) {
return true;
} else {
return "SCRAPPER_STOPPED";
}
}
}
答案 1 :(得分:0)
到目前为止,似乎目标是从完全不同的流程/请求(通过单击浏览器中的按钮启动)来控制一个基于NodeJS的处理(运行无限循环)。
有多种实现inter-process communication的方法(即其命名方式)。其中之一是node-ipc
完全不同的方法可能是将此连续操作移至某些队列管理器。这样,您可能会获得其他功能,例如防故障执行(因此您可以从中断的地方继续继续执行过程)或透明并行化。