中断一个功能来做其他事情

时间:2017-05-24 04:40:54

标签: javascript node.js

设置是节点js服务器

我正在构建一个作业处理程序,即它从mongo db文档中获取作业并处理它并报告进度,并让我中途停止作业(同时保存其当前状态)。

出于测试目的,我在数组中有一个1,000,000个数字的大数据集,我正在对此进行操作。我最近了解到JS在功能级别是顺序的,即函数将按顺序运行,没有任何东西可以中断它。

但这对我来说是一个问题,因为我想要中断函数来接收我服务器上的其他请求(我目前无法做到),其中一个也可以帮我发送停止请求。< / p>

最近我了解了生成器迭代器,但即使这样也不行

function* hello(job, i) {


for(i; i<job.data.numbersToPrint.length; i++){
    if (runningJobs[job._id]) {
      console.log(job.data.numbersToPrint[i]);
      yield;
    } else {
      job.updateCurrentAndStop(currentJobStatus[job._id]);
    }
  }
}

let testJobHandler = function (job) {
  let i;
  if (job.currentlyProcessing !== null && job.currentlyProcessing.currentIndex)
    i = job.currentlyProcessing.currentIndex;
  else
    i = 0;
  currentJobStatus[job._id] = {};
  let gen = hello(job, i++);
  while(!gen.next(job, i).done) {
    console.log("NEXT");
    currentJobStatus[job._id].currentIndex = i;
    i++;
  }
};

我怀疑它不会因为它只是将范围传递给另一个函数。

任何人都可以告诉我如何有效地中断函数,如果不可能,我还能做些什么来实现这个功能。

0 个答案:

没有答案