diff options
Diffstat (limited to 'build-es/eachOf.js')
-rw-r--r-- | build-es/eachOf.js | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/build-es/eachOf.js b/build-es/eachOf.js new file mode 100644 index 0000000..e06f2bb --- /dev/null +++ b/build-es/eachOf.js @@ -0,0 +1,34 @@ +'use strict'; + +import once from 'lodash-es/once'; +import noop from 'lodash-es/noop'; + +import keyIterator from './internal/keyIterator'; +import onlyOnce from './internal/onlyOnce'; + +export default function eachOf(object, iterator, callback) { + callback = once(callback || noop); + object = object || []; + + var iter = keyIterator(object); + var key, completed = 0; + + while ((key = iter()) != null) { + completed += 1; + iterator(object[key], key, onlyOnce(done)); + } + + if (completed === 0) callback(null); + + function done(err) { + completed--; + if (err) { + callback(err); + } + // Check key is null in case iterator isn't exhausted + // and done resolved synchronously. + else if (key === null && completed <= 0) { + callback(null); + } + } +} |