summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/async.js33
1 files changed, 17 insertions, 16 deletions
diff --git a/lib/async.js b/lib/async.js
index 7aa32b9..30c5c83 100644
--- a/lib/async.js
+++ b/lib/async.js
@@ -39,20 +39,18 @@
};
function only_once(fn) {
- var called = false;
return function() {
- if (called) throw new Error("Callback was already called.");
- called = true;
+ if (fn === null) throw new Error("Callback was already called.");
fn.apply(this, arguments);
+ fn = null;
};
}
function _once(fn) {
- var called = false;
return function() {
- if (called) return;
- called = true;
+ if (fn === null) return;
fn.apply(this, arguments);
+ fn = null;
};
}
@@ -116,6 +114,13 @@
});
}
+ function _indexOf(arr, item) {
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i] === item) return i;
+ }
+ return -1;
+ }
+
var _keys = Object.keys || function (obj) {
var keys = [];
for (var k in obj) {
@@ -521,12 +526,8 @@
listeners.unshift(fn);
}
function removeListener(fn) {
- for (var i = 0; i < listeners.length; i += 1) {
- if (listeners[i] === fn) {
- listeners.splice(i, 1);
- return;
- }
- }
+ var idx = _indexOf(listeners, fn);
+ if (idx >= 0) listeners.splice(idx, 1);
}
function taskComplete() {
remainingTasks--;
@@ -549,8 +550,8 @@
}
if (err) {
var safeResults = {};
- _arrayEach(_keys(results), function(rkey) {
- safeResults[rkey] = results[rkey];
+ _forEachOf(results, function(val, rkey) {
+ safeResults[rkey] = val;
});
safeResults[k] = args;
callback(err, safeResults);
@@ -560,7 +561,7 @@
async.setImmediate(taskComplete);
}
});
- var requires = task.slice(0, Math.abs(task.length - 1));
+ var requires = task.slice(0, task.length - 1);
// prevent dead-locks
var len = requires.length;
var dep;
@@ -568,7 +569,7 @@
if (!(dep = tasks[requires[len]])) {
throw new Error('Has inexistant dependency');
}
- if (_isArray(dep) && !!~dep.indexOf(k)) {
+ if (_isArray(dep) && _indexOf(dep, k) >= 0) {
throw new Error('Has cyclic dependencies');
}
}