停止并行执行

时间:2013-10-15 06:41:06

标签: node.js parallel-processing

我有四个并行运行的功能。如果任何一个函数介于两者之间,则如何停止执行其他函数。任何有关这方面的帮助都会非常有帮助。

3 个答案:

答案 0 :(得分:2)

除非它是setTimeout或setInterval,否则我认为你不能。无论如何,您可以在函数的逻辑中设置检查点。这不是一个全部清洁,但它可以工作。例如,检查回调中的其他函数:

var control = true;

async1(function(e,r){
  if(e) {
    control = false;
    return callback1(e,r);
  };
  if(control) callback1(e,r);
});

async2(function(e,r){
  if(e) {
    control = false;
    return callback2(e,r);
  };
  if(control) callback2(e,r);
});

Althougt这样做,我会用throrin19并说Async这是一个很好的lib来做到这一点。

但也许您想查看co。它可以比Async更好地处理您的问题。

答案 1 :(得分:1)

您无法停止执行某项功能。函数执行并同步返回,因此技术上没有什么可以停止的。但是可能存在异步任务,它以某种方式使用底层libuv功能(也就是说,如果不调用某些异步节点api或某些本机模块,则无法执行任何异步操作)。函数只是这些任务的接口,它们不支持取消任务,只能启动。

因此,您无法真正取消异步操作,但如果失败,您可以忽略其他操作的结果。以下是它的实现方式:

var tasks = [], //array of tasks, functions accepting callback(err) 
    pending = tasks.length, //amount of pending tasks
    failed = false;

function done(err) { //callback for each task
    if (failed) return;
    if (err) {
         failed = true;
         callback(err); //callback for all tasks
    }  

    if (!--pending) callback(); //all tasks completed
}

tasks.forEach(function(task) {
    task(done);
});

答案 2 :(得分:0)

我认为你应该使用Async库。 Async包含并行执行函数的功能(当然)。每个函数都会进行回调(错误,结果)。 如果发生错误,Async将删除所有其他进程。

Documentation