Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
async/lib/mapValuesLimit.js /
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
41 lines (39 sloc)
1.57 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import eachOfLimit from './internal/eachOfLimit.js' | |
| import awaitify from './internal/awaitify.js' | |
| import once from './internal/once.js' | |
| import wrapAsync from './internal/wrapAsync.js' | |
| /** | |
| * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a | |
| * time. | |
| * | |
| * @name mapValuesLimit | |
| * @static | |
| * @memberOf module:Collections | |
| * @method | |
| * @see [async.mapValues]{@link module:Collections.mapValues} | |
| * @category Collection | |
| * @param {Object} obj - A collection to iterate over. | |
| * @param {number} limit - The maximum number of async operations at a time. | |
| * @param {AsyncFunction} iteratee - A function to apply to each value and key | |
| * in `coll`. | |
| * The iteratee should complete with the transformed value as its result. | |
| * Invoked with (value, key, callback). | |
| * @param {Function} [callback] - A callback which is called when all `iteratee` | |
| * functions have finished, or an error occurs. `result` is a new object consisting | |
| * of each key from `obj`, with each transformed value on the right-hand side. | |
| * Invoked with (err, result). | |
| * @returns {Promise} a promise, if no callback is passed | |
| */ | |
| function mapValuesLimit(obj, limit, iteratee, callback) { | |
| callback = once(callback); | |
| var newObj = {}; | |
| var _iteratee = wrapAsync(iteratee) | |
| return eachOfLimit(limit)(obj, (val, key, next) => { | |
| _iteratee(val, key, (err, result) => { | |
| if (err) return next(err); | |
| newObj[key] = result; | |
| next(err); | |
| }); | |
| }, err => callback(err, newObj)); | |
| } | |
| export default awaitify(mapValuesLimit, 4) |