summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Early <alexander.early@gmail.com>2016-01-02 14:01:44 -0800
committerAlexander Early <alexander.early@gmail.com>2016-01-02 14:01:44 -0800
commit1604c741310a1f75f5e135621c2dc9acf0699d3f (patch)
treef7cc18fa0c7794ccb3398030593f7e8f2ea01348
parentb9cc28973144a9e1a84184d9d0bf48749899bfd9 (diff)
parentf360e0d6d21c0fd9942252358d03b223a8ea42e7 (diff)
downloadasync-1604c741310a1f75f5e135621c2dc9acf0699d3f.tar.gz
Merge pull request #993 from gr2m/master
auto stops after error #988
-rw-r--r--lib/async.js5
-rwxr-xr-xtest/test-async.js16
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;