| '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(); | 
|       } | 
|     }); | 
|   }); | 
| } |