| 'use strict'; |
| |
| module.exports = asyncForEach; |
| |
| /** |
| * Simultaneously processes all items in the given array. |
| * |
| * @param {array} array - The array to iterate over |
| * @param {function} iterator - The function to call for each item in the array |
| * @param {function} done - The function to call when all iterators have completed |
| */ |
| function asyncForEach (array, iterator, done) { |
| if (array.length === 0) { |
| // NOTE: Normally a bad idea to mix sync and async, but it's safe here because |
| // of the way that this method is currently used by DirectoryReader. |
| done(); |
| return; |
| } |
| |
| // Simultaneously process all items in the array. |
| let pending = array.length; |
| array.forEach(item => { |
| iterator(item, () => { |
| if (--pending === 0) { |
| done(); |
| } |
| }); |
| }); |
| } |