diff options
author | Alexander Early <alexander.early@gmail.com> | 2016-01-02 14:01:44 -0800 |
---|---|---|
committer | Alexander Early <alexander.early@gmail.com> | 2016-01-02 14:01:44 -0800 |
commit | 1604c741310a1f75f5e135621c2dc9acf0699d3f (patch) | |
tree | f7cc18fa0c7794ccb3398030593f7e8f2ea01348 | |
parent | b9cc28973144a9e1a84184d9d0bf48749899bfd9 (diff) | |
parent | f360e0d6d21c0fd9942252358d03b223a8ea42e7 (diff) | |
download | async-1604c741310a1f75f5e135621c2dc9acf0699d3f.tar.gz |
Merge pull request #993 from gr2m/master
auto stops after error #988
-rw-r--r-- | lib/async.js | 5 | ||||
-rwxr-xr-x | test/test-async.js | 16 |
2 files changed, 21 insertions, 0 deletions
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 { 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; |