设置是节点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++;
}
};
我怀疑它不会因为它只是将范围传递给另一个函数。
任何人都可以告诉我如何有效地中断函数,如果不可能,我还能做些什么来实现这个功能。