summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/index.js3
-rw-r--r--lib/race.js14
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/index.js b/lib/index.js
index a165909..2e27f25 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -42,6 +42,7 @@ import parallel from './parallel';
import parallelLimit from './parallelLimit';
import priorityQueue from './priorityQueue';
import queue from './queue';
+import race from './race';
import reduce from './reduce';
import reduceRight from './reduceRight';
import reject from './reject';
@@ -106,6 +107,7 @@ export default {
parallelLimit: parallelLimit,
priorityQueue: priorityQueue,
queue: queue,
+ race: race,
reduce: reduce,
reduceRight: reduceRight,
reject: reject,
@@ -188,6 +190,7 @@ export {
parallelLimit as parallelLimit,
priorityQueue as priorityQueue,
queue as queue,
+ race as race,
reduce as reduce,
reduceRight as reduceRight,
reject as reject,
diff --git a/lib/race.js b/lib/race.js
new file mode 100644
index 0000000..4a5f8a5
--- /dev/null
+++ b/lib/race.js
@@ -0,0 +1,14 @@
+'use strict';
+
+import isArray from 'lodash/isArray';
+import noop from 'lodash/noop';
+import once from 'lodash/once';
+
+export default function race(tasks, cb) {
+ cb = once(cb || noop);
+ if (!isArray(tasks)) return cb(new TypeError('First argument to race must be an array of functions'));
+ if (!tasks.length) return cb();
+ for (let i = 0; i < tasks.length; i++) {
+ tasks[i](cb);
+ }
+}