| 1234567891011121314151617181920212223242526272829 |
- 'use strict';
- var a = require('./a');
- var once = require('./once');
- var concurrent = require('./concurrent');
- var CONCURRENTLY = require('./CONCURRENTLY');
- var SERIAL = require('./SERIAL');
- module.exports = function _map (cap, then, attached) {
- function api (collection, concurrency, iterator, done) {
- var args = arguments;
- if (args.length === 2) { iterator = concurrency; concurrency = CONCURRENTLY; }
- if (args.length === 3 && typeof concurrency !== 'number') { done = iterator; iterator = concurrency; concurrency = CONCURRENTLY; }
- var keys = Object.keys(collection);
- var tasks = a(collection) ? [] : {};
- keys.forEach(function insert (key) {
- tasks[key] = function iterate (cb) {
- if (iterator.length === 3) {
- iterator(collection[key], key, cb);
- } else {
- iterator(collection[key], cb);
- }
- };
- });
- concurrent(tasks, cap || concurrency, then ? then(collection, once(done)) : done);
- }
- if (!attached) { api.series = _map(SERIAL, then, true); }
- return api;
- };
|