每当执行时终止函数-Javascript

时间:2018-08-11 11:15:27

标签: javascript node.js

如何停止某个函数的进一步执行?我的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()构造函数,但同时,当所有这些功能开始起作用时,我想随时使用同一页上的另一个按钮终止它。假设一个按钮将启动功能,另一个按钮将停止启动的功能,这是我无法解决的问题。

2 个答案:

答案 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

完全不同的方法可能是将此连续操作移至某些队列管理器。这样,您可能会获得其他功能,例如防故障执行(因此您可以从中断的地方继续继续执行过程)或透明并行化。