我有四个并行运行的功能。如果任何一个函数介于两者之间,则如何停止执行其他函数。任何有关这方面的帮助都会非常有帮助。
答案 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将删除所有其他进程。