30 lines
796 B
JavaScript
30 lines
796 B
JavaScript
'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();
|
|
}
|
|
});
|
|
});
|
|
}
|