我有四个并行运行的函数。如果任何一个功能在两者之间失败,我该如何停止其他功能的执行。对此的任何帮助都会非常有帮助。
问问题
1637 次
3 回答
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);
});
不过要做到这一点,我会选择 throrin19 并说 Async 是一个很好的库来做到这一点。
但也许你想检查一下co。它可以比 Async 更好地处理您的问题。
于 2013-10-15T07:33:00.567 回答
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);
});
于 2013-10-15T10:37:40.777 回答
0
我认为您应该使用异步库。Async 包含并行执行函数的并行函数(当然)。每个函数都接受一个回调(错误,结果)。如果发生错误,Async 将切断所有其他进程。
于 2013-10-15T06:56:50.680 回答