From f556b202d418c59de8f76e409d82c75b12f5a9ca Mon Sep 17 00:00:00 2001 From: Gregor Martynus Date: Wed, 30 Dec 2015 16:43:41 +0100 Subject: test: auto stops after error #988 --- test/test-async.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/test-async.js b/test/test-async.js index ee0b950..05c0228 100755 --- a/test/test-async.js +++ b/test/test-async.js @@ -601,6 +601,22 @@ exports['auto prevent dead-locks due to cyclic dependencies'] = function(test) { test.done(); }; +// Issue 988 on github: https://github.com/caolan/async/issues/988 +exports['auto stops running tasks on error'] = function(test) { + async.auto({ + task1: function (callback) { + callback('error'); + }, + task2: function (callback) { + test.ok(false, 'test2 should not be called'); + callback(); + } + }, 1, function (error) { + test.equal(error, 'error', 'finishes with error'); + test.done(); + }); +}; + // Issue 306 on github: https://github.com/caolan/async/issues/306 exports['retry when attempt succeeds'] = function(test) { var failed = 3; -- cgit v1.2.1 From f360e0d6d21c0fd9942252358d03b223a8ea42e7 Mon Sep 17 00:00:00 2001 From: Gregor Martynus Date: Wed, 30 Dec 2015 17:06:40 +0100 Subject: fix: auto stops after error #988 --- lib/async.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/async.js b/lib/async.js index 3748ac0..9ecbda6 100644 --- a/lib/async.js +++ b/lib/async.js @@ -528,6 +528,8 @@ var results = {}; var runningTasks = 0; + var hasError = false; + var listeners = []; function addListener(fn) { listeners.unshift(fn); @@ -550,6 +552,7 @@ }); _arrayEach(keys, function (k) { + if (hasError) return; var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; var taskCallback = _restParam(function(err, args) { runningTasks--; @@ -562,6 +565,8 @@ safeResults[rkey] = val; }); safeResults[k] = args; + hasError = true; + callback(err, safeResults); } else { -- cgit v1.2.1