A collection of async functions for manipulating collections, such as
arrays and objects.
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
 
    
    
    
     
    
    
    
        Methods
        
            
    
    (static) concat(coll, iteratee, callbackopt)
    
    import concat from 'async/concat';
Applies iteratee to each item in coll, concatenating the results. Returns
the concatenated list. The iteratees are called in parallel, and the
results are concatenated as they return. The results array will be returned in
the original order of coll passed to the iteratee function.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | A function to apply to each item in coll,
which should use an array as its result. Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished, or an error occurs. Results is an array
containing the concatenated results of theiterateefunction. Invoked with
(err, results). | 
    
    
Returns:
        
    A Promise, if no callback is passed
 
    
    Example
    
    // dir1 is a directory that contains file1.txt, file2.txt
// dir2 is a directory that contains file3.txt, file4.txt
// dir3 is a directory that contains file5.txt
// dir4 does not exist
let directoryList = ['dir1','dir2','dir3'];
let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4'];
// Using callbacks
async.concat(directoryList, fs.readdir, function(err, results) {
   if (err) {
       console.log(err);
   } else {
       console.log(results);
       // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]
   }
});
// Error Handling
async.concat(withMissingDirectoryList, fs.readdir, function(err, results) {
   if (err) {
       console.log(err);
       // [ Error: ENOENT: no such file or directory ]
       // since dir4 does not exist
   } else {
       console.log(results);
   }
});
// Using Promises
async.concat(directoryList, fs.readdir)
.then(results => {
    console.log(results);
    // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]
}).catch(err => {
     console.log(err);
});
// Error Handling
async.concat(withMissingDirectoryList, fs.readdir)
.then(results => {
    console.log(results);
}).catch(err => {
    console.log(err);
    // [ Error: ENOENT: no such file or directory ]
    // since dir4 does not exist
});
// Using async/await
async () => {
    try {
        let results = await async.concat(directoryList, fs.readdir);
        console.log(results);
        // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]
    } catch (err) {
        console.log(err);
    }
}
// Error Handling
async () => {
    try {
        let results = await async.concat(withMissingDirectoryList, fs.readdir);
        console.log(results);
    } catch (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
        // since dir4 does not exist
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) concatLimit(coll, limit, iteratee, callbackopt)
    
    import concatLimit from 'async/concatLimit';
The same as concat but runs a maximum of limit async operations at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | A function to apply to each item in coll,
which should use an array as its result. Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished, or an error occurs. Results is an array
containing the concatenated results of theiterateefunction. Invoked with
(err, results). | 
    
    
Returns:
        
    A Promise, if no callback is passed
 
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) concatSeries(coll, iteratee, callbackopt)
    
    import concatSeries from 'async/concatSeries';
The same as concat but runs only a single async operation at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | A function to apply to each item in coll.
The iteratee should complete with an array an array of results.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished, or an error occurs. Results is an array
containing the concatenated results of theiterateefunction. Invoked with
(err, results). | 
    
    
Returns:
        
    A Promise, if no callback is passed
 
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) detect(coll, iteratee, callbackopt)
    
    import detect from 'async/detect';
Returns the first value in coll that passes an async truth test. The
iteratee is applied in parallel, meaning the first iteratee to return
true will fire the detect callback with that result. That means the
result might not be the first item in the original coll (in terms of order)
that passes the test.
If order within the original coll is important, then look at
detectSeries.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | A truth test to apply to each item in coll.
The iteratee must complete with a boolean value as its result.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called as soon as any
iteratee returns true, or after all theiterateefunctions have finished.
Result will be the first item in the array that passes the truth test
(iteratee) or the valueundefinedif none passed. Invoked with
(err, result). | 
    
    
Returns:
        
    A Promise, if no callback is passed
 
    
    Example
    
    // dir1 is a directory that contains file1.txt, file2.txt
// dir2 is a directory that contains file3.txt, file4.txt
// dir3 is a directory that contains file5.txt
// asynchronous function that checks if a file exists
function fileExists(file, callback) {
   fs.access(file, fs.constants.F_OK, (err) => {
       callback(null, !err);
   });
}
async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists,
   function(err, result) {
       console.log(result);
       // dir1/file1.txt
       // result now equals the first file in the list that exists
   }
);
// Using Promises
async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists)
.then(result => {
    console.log(result);
    // dir1/file1.txt
    // result now equals the first file in the list that exists
}).catch(err => {
    console.log(err);
});
// Using async/await
async () => {
    try {
        let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists);
        console.log(result);
        // dir1/file1.txt
        // result now equals the file in the list that exists
    }
    catch (err) {
        console.log(err);
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) detectLimit(coll, limit, iteratee, callbackopt)
    
    import detectLimit from 'async/detectLimit';
The same as detect but runs a maximum of limit async operations at a
time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | A truth test to apply to each item in coll.
The iteratee must complete with a boolean value as its result.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called as soon as any
iteratee returns true, or after all theiterateefunctions have finished.
Result will be the first item in the array that passes the truth test
(iteratee) or the valueundefinedif none passed. Invoked with
(err, result). | 
    
    
Returns:
        
    a Promise if no callback is passed
 
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) detectSeries(coll, iteratee, callbackopt)
    
    import detectSeries from 'async/detectSeries';
The same as detect but runs only a single async operation at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | A truth test to apply to each item in coll.
The iteratee must complete with a boolean value as its result.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called as soon as any
iteratee returns true, or after all theiterateefunctions have finished.
Result will be the first item in the array that passes the truth test
(iteratee) or the valueundefinedif none passed. Invoked with
(err, result). | 
    
    
Returns:
        
    a Promise if no callback is passed
 
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) each(coll, iteratee, callbackopt) → {Promise}
    
    import each from 'async/each';
Applies the function iteratee to each item in coll, in parallel.
The iteratee is called with an item from the list, and a callback for when
it has finished. If the iteratee passes an error to its callback, the
main callback (for the each function) is immediately called with the
error.
Note, that since this function applies iteratee to each item in parallel,
there is no guarantee that the iteratee functions will complete in order.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to
each item in coll. Invoked with (item, callback).
The array index is not passed to the iteratee.
If you need the index, useeachOf. | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all
iterateefunctions have finished, or an error occurs. Invoked with (err). | 
    
    
Returns:
        
    a promise, if a callback is omitted
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // dir1 is a directory that contains file1.txt, file2.txt
// dir2 is a directory that contains file3.txt, file4.txt
// dir3 is a directory that contains file5.txt
// dir4 does not exist
const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt'];
const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt'];
// asynchronous function that deletes a file
const deleteFile = function(file, callback) {
    fs.unlink(file, callback);
};
// Using callbacks
async.each(fileList, deleteFile, function(err) {
    if( err ) {
        console.log(err);
    } else {
        console.log('All files have been deleted successfully');
    }
});
// Error Handling
async.each(withMissingFileList, deleteFile, function(err){
    console.log(err);
    // [ Error: ENOENT: no such file or directory ]
    // since dir4/file2.txt does not exist
    // dir1/file1.txt could have been deleted
});
// Using Promises
async.each(fileList, deleteFile)
.then( () => {
    console.log('All files have been deleted successfully');
}).catch( err => {
    console.log(err);
});
// Error Handling
async.each(fileList, deleteFile)
.then( () => {
    console.log('All files have been deleted successfully');
}).catch( err => {
    console.log(err);
    // [ Error: ENOENT: no such file or directory ]
    // since dir4/file2.txt does not exist
    // dir1/file1.txt could have been deleted
});
// Using async/await
async () => {
    try {
        await async.each(files, deleteFile);
    }
    catch (err) {
        console.log(err);
    }
}
// Error Handling
async () => {
    try {
        await async.each(withMissingFileList, deleteFile);
    }
    catch (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
        // since dir4/file2.txt does not exist
        // dir1/file1.txt could have been deleted
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) eachLimit(coll, limit, iteratee, callbackopt) → {Promise}
    
    import eachLimit from 'async/eachLimit';
The same as each but runs a maximum of limit async operations at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
The array index is not passed to the iteratee.
If you need the index, useeachOfLimit.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all
iterateefunctions have finished, or an error occurs. Invoked with (err). | 
    
    
Returns:
        
    a promise, if a callback is omitted
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) eachOf(coll, iteratee, callbackopt) → {Promise}
    
    import eachOf from 'async/eachOf';
Like each, except that it passes the key (or index) as the second argument
to the iteratee.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | A function to apply to each
item in coll.
Thekeyis the item's key, or index in the case of an array.
Invoked with (item, key, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all
iterateefunctions have finished, or an error occurs. Invoked with (err). | 
    
    
Returns:
        
    a promise, if a callback is omitted
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // dev.json is a file containing a valid json object config for dev environment
// dev.json is a file containing a valid json object config for test environment
// prod.json is a file containing a valid json object config for prod environment
// invalid.json is a file with a malformed json object
let configs = {}; //global variable
let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'};
let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'};
// asynchronous function that reads a json file and parses the contents as json object
function parseFile(file, key, callback) {
    fs.readFile(file, "utf8", function(err, data) {
        if (err) return calback(err);
        try {
            configs[key] = JSON.parse(data);
        } catch (e) {
            return callback(e);
        }
        callback();
    });
}
// Using callbacks
async.forEachOf(validConfigFileMap, parseFile, function (err) {
    if (err) {
        console.error(err);
    } else {
        console.log(configs);
        // configs is now a map of JSON data, e.g.
        // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}
    }
});
//Error handing
async.forEachOf(invalidConfigFileMap, parseFile, function (err) {
    if (err) {
        console.error(err);
        // JSON parse error exception
    } else {
        console.log(configs);
    }
});
// Using Promises
async.forEachOf(validConfigFileMap, parseFile)
.then( () => {
    console.log(configs);
    // configs is now a map of JSON data, e.g.
    // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}
}).catch( err => {
    console.error(err);
});
//Error handing
async.forEachOf(invalidConfigFileMap, parseFile)
.then( () => {
    console.log(configs);
}).catch( err => {
    console.error(err);
    // JSON parse error exception
});
// Using async/await
async () => {
    try {
        let result = await async.forEachOf(validConfigFileMap, parseFile);
        console.log(configs);
        // configs is now a map of JSON data, e.g.
        // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}
    }
    catch (err) {
        console.log(err);
    }
}
//Error handing
async () => {
    try {
        let result = await async.forEachOf(invalidConfigFileMap, parseFile);
        console.log(configs);
    }
    catch (err) {
        console.log(err);
        // JSON parse error exception
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) eachOfLimit(coll, limit, iteratee, callbackopt) → {Promise}
    
    import eachOfLimit from 'async/eachOfLimit';
The same as eachOf but runs a maximum of limit async operations at a
time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each
item in coll. Thekeyis the item's key, or index in the case of an
array.
Invoked with (item, key, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all
iterateefunctions have finished, or an error occurs. Invoked with (err). | 
    
    
Returns:
        
    a promise, if a callback is omitted
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) eachOfSeries(coll, iteratee, callbackopt) → {Promise}
    
    import eachOfSeries from 'async/eachOfSeries';
The same as eachOf but runs only a single async operation at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
Invoked with (item, key, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs. Invoked with (err). | 
    
    
Returns:
        
    a promise, if a callback is omitted
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) eachSeries(coll, iteratee, callbackopt) → {Promise}
    
    import eachSeries from 'async/eachSeries';
The same as each but runs only a single async operation at a time.
Note, that unlike each, this function applies iteratee to each item
in series and therefore the iteratee functions will complete in order.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each
item in coll.
The array index is not passed to the iteratee.
If you need the index, useeachOfSeries.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all
iterateefunctions have finished, or an error occurs. Invoked with (err). | 
    
    
Returns:
        
    a promise, if a callback is omitted
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) every(coll, iteratee, callbackopt) → {Promise}
    
    import every from 'async/every';
Returns true if every element in coll satisfies an async test. If any
iteratee call returns false, the main callback is immediately called.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async truth test to apply to each item
in the collection in parallel.
The iteratee must complete with a boolean result value.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Result will be eithertrueorfalsedepending on the values of the async tests. Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // dir1 is a directory that contains file1.txt, file2.txt
// dir2 is a directory that contains file3.txt, file4.txt
// dir3 is a directory that contains file5.txt
// dir4 does not exist
const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt'];
const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];
// asynchronous function that checks if a file exists
function fileExists(file, callback) {
   fs.access(file, fs.constants.F_OK, (err) => {
       callback(null, !err);
   });
}
// Using callbacks
async.every(fileList, fileExists, function(err, result) {
    console.log(result);
    // true
    // result is true since every file exists
});
async.every(withMissingFileList, fileExists, function(err, result) {
    console.log(result);
    // false
    // result is false since NOT every file exists
});
// Using Promises
async.every(fileList, fileExists)
.then( result => {
    console.log(result);
    // true
    // result is true since every file exists
}).catch( err => {
    console.log(err);
});
async.every(withMissingFileList, fileExists)
.then( result => {
    console.log(result);
    // false
    // result is false since NOT every file exists
}).catch( err => {
    console.log(err);
});
// Using async/await
async () => {
    try {
        let result = await async.every(fileList, fileExists);
        console.log(result);
        // true
        // result is true since every file exists
    }
    catch (err) {
        console.log(err);
    }
}
async () => {
    try {
        let result = await async.every(withMissingFileList, fileExists);
        console.log(result);
        // false
        // result is false since NOT every file exists
    }
    catch (err) {
        console.log(err);
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) everyLimit(coll, limit, iteratee, callbackopt) → {Promise}
    
    import everyLimit from 'async/everyLimit';
The same as every but runs a maximum of limit async operations at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | An async truth test to apply to each item
in the collection in parallel.
The iteratee must complete with a boolean result value.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Result will be eithertrueorfalsedepending on the values of the async tests. Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) everySeries(coll, iteratee, callbackopt) → {Promise}
    
    import everySeries from 'async/everySeries';
The same as every but runs only a single async operation at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async truth test to apply to each item
in the collection in series.
The iteratee must complete with a boolean result value.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Result will be eithertrueorfalsedepending on the values of the async tests. Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) filter(coll, iteratee, callbackopt) → {Promise}
    
    import filter from 'async/filter';
Returns a new array of all the values in coll which pass an async truth
test. This operation is performed in parallel, but the results array will be
in the same order as the original.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | function | A truth test to apply to each item in coll.
Theiterateeis passed acallback(err, truthValue), which must be called
with a boolean argument once it has completed. Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // dir1 is a directory that contains file1.txt, file2.txt
// dir2 is a directory that contains file3.txt, file4.txt
// dir3 is a directory that contains file5.txt
const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];
// asynchronous function that checks if a file exists
function fileExists(file, callback) {
   fs.access(file, fs.constants.F_OK, (err) => {
       callback(null, !err);
   });
}
// Using callbacks
async.filter(files, fileExists, function(err, results) {
   if(err) {
       console.log(err);
   } else {
       console.log(results);
       // [ 'dir1/file1.txt', 'dir2/file3.txt' ]
       // results is now an array of the existing files
   }
});
// Using Promises
async.filter(files, fileExists)
.then(results => {
    console.log(results);
    // [ 'dir1/file1.txt', 'dir2/file3.txt' ]
    // results is now an array of the existing files
}).catch(err => {
    console.log(err);
});
// Using async/await
async () => {
    try {
        let results = await async.filter(files, fileExists);
        console.log(results);
        // [ 'dir1/file1.txt', 'dir2/file3.txt' ]
        // results is now an array of the existing files
    }
    catch (err) {
        console.log(err);
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) filterLimit(coll, limit, iteratee, callbackopt) → {Promise}
    
    import filterLimit from 'async/filterLimit';
The same as filter but runs a maximum of limit async operations at a
time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | function | A truth test to apply to each item in coll.
Theiterateeis passed acallback(err, truthValue), which must be called
with a boolean argument once it has completed. Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) filterSeries(coll, iteratee, callbackopt) → {Promise}
    
    import filterSeries from 'async/filterSeries';
The same as filter but runs only a single async operation at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | function | A truth test to apply to each item in coll.
Theiterateeis passed acallback(err, truthValue), which must be called
with a boolean argument once it has completed. Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Invoked with (err, results) | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) groupBy(coll, iteratee, callbackopt) → {Promise}
    
    import groupBy from 'async/groupBy';
Returns a new object, where each value corresponds to an array of items, from
coll, that returned the corresponding key. That is, the keys of the object
correspond to the values passed to the iteratee callback.
Note: Since this function applies the iteratee to each item in parallel,
there is no guarantee that the iteratee functions will complete in order.
However, the values for each key in the result will be in the same order as
the original coll. For Objects, the values will roughly be in the order of
the original Objects' keys (but this can vary across JavaScript engines).
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
The iteratee should complete with akeyto group the value under.
Invoked with (value, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs. Result is anObjectwhoses
properties are arrays of values which returned the corresponding key. | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // dir1 is a directory that contains file1.txt, file2.txt
// dir2 is a directory that contains file3.txt, file4.txt
// dir3 is a directory that contains file5.txt
// dir4 does not exist
const files = ['dir1/file1.txt','dir2','dir4']
// asynchronous function that detects file type as none, file, or directory
function detectFile(file, callback) {
    fs.stat(file, function(err, stat) {
        if (err) {
            return callback(null, 'none');
        }
        callback(null, stat.isDirectory() ? 'directory' : 'file');
    });
}
//Using callbacks
async.groupBy(files, detectFile, function(err, result) {
    if(err) {
        console.log(err);
    } else {
	       console.log(result);
        // {
        //     file: [ 'dir1/file1.txt' ],
        //     none: [ 'dir4' ],
        //     directory: [ 'dir2']
        // }
        // result is object containing the files grouped by type
    }
});
// Using Promises
async.groupBy(files, detectFile)
.then( result => {
    console.log(result);
    // {
    //     file: [ 'dir1/file1.txt' ],
    //     none: [ 'dir4' ],
    //     directory: [ 'dir2']
    // }
    // result is object containing the files grouped by type
}).catch( err => {
    console.log(err);
});
// Using async/await
async () => {
    try {
        let result = await async.groupBy(files, detectFile);
        console.log(result);
        // {
        //     file: [ 'dir1/file1.txt' ],
        //     none: [ 'dir4' ],
        //     directory: [ 'dir2']
        // }
        // result is object containing the files grouped by type
    }
    catch (err) {
        console.log(err);
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) groupByLimit(coll, limit, iteratee, callbackopt) → {Promise}
    
    import groupByLimit from 'async/groupByLimit';
The same as groupBy but runs a maximum of limit async operations at a time.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
The iteratee should complete with akeyto group the value under.
Invoked with (value, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs. Result is anObjectwhoses
properties are arrays of values which returned the corresponding key. | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) groupBySeries(coll, iteratee, callbackopt) → {Promise}
    
    import groupBySeries from 'async/groupBySeries';
The same as groupBy but runs only a single async operation at a time.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
The iteratee should complete with akeyto group the value under.
Invoked with (value, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs. Result is anObjectwhose
properties are arrays of values which returned the corresponding key. | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) map(coll, iteratee, callbackopt) → {Promise}
    
    import map from 'async/map';
Produces a new collection of values by mapping each value in coll through
the iteratee function. The iteratee is called with an item from coll
and a callback for when it has finished processing. Each of these callback
takes 2 arguments: an error, and the transformed item from coll. If
iteratee passes an error to its callback, the main callback (for the
map function) is immediately called with the error.
Note, that since this function applies the iteratee to each item in
parallel, there is no guarantee that the iteratee functions will complete
in order. However, the results array will be in the same order as the
original coll.
If map is passed an Object, the results will be an Array.  The results
will roughly be in the order of the original Objects' keys (but this can
vary across JavaScript engines).
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
The iteratee should complete with the transformed item.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs. Results is an Array of the
transformed items from thecoll. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // file1.txt is a file that is 1000 bytes in size
// file2.txt is a file that is 2000 bytes in size
// file3.txt is a file that is 3000 bytes in size
// file4.txt does not exist
const fileList = ['file1.txt','file2.txt','file3.txt'];
const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];
// asynchronous function that returns the file size in bytes
function getFileSizeInBytes(file, callback) {
    fs.stat(file, function(err, stat) {
        if (err) {
            return callback(err);
        }
        callback(null, stat.size);
    });
}
// Using callbacks
async.map(fileList, getFileSizeInBytes, function(err, results) {
    if (err) {
        console.log(err);
    } else {
        console.log(results);
        // results is now an array of the file size in bytes for each file, e.g.
        // [ 1000, 2000, 3000]
    }
});
// Error Handling
async.map(withMissingFileList, getFileSizeInBytes, function(err, results) {
    if (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
    } else {
        console.log(results);
    }
});
// Using Promises
async.map(fileList, getFileSizeInBytes)
.then( results => {
    console.log(results);
    // results is now an array of the file size in bytes for each file, e.g.
    // [ 1000, 2000, 3000]
}).catch( err => {
    console.log(err);
});
// Error Handling
async.map(withMissingFileList, getFileSizeInBytes)
.then( results => {
    console.log(results);
}).catch( err => {
    console.log(err);
    // [ Error: ENOENT: no such file or directory ]
});
// Using async/await
async () => {
    try {
        let results = await async.map(fileList, getFileSizeInBytes);
        console.log(results);
        // results is now an array of the file size in bytes for each file, e.g.
        // [ 1000, 2000, 3000]
    }
    catch (err) {
        console.log(err);
    }
}
// Error Handling
async () => {
    try {
        let results = await async.map(withMissingFileList, getFileSizeInBytes);
        console.log(results);
    }
    catch (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) mapLimit(coll, limit, iteratee, callbackopt) → {Promise}
    
    import mapLimit from 'async/mapLimit';
The same as map but runs a maximum of limit async operations at a time.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
The iteratee should complete with the transformed item.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs. Results is an array of the
transformed items from thecoll. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) mapSeries(coll, iteratee, callbackopt) → {Promise}
    
    import mapSeries from 'async/mapSeries';
The same as map but runs only a single async operation at a time.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
The iteratee should complete with the transformed item.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs. Results is an array of the
transformed items from thecoll. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) mapValues(obj, iteratee, callbackopt) → {Promise}
    
    import mapValues from 'async/mapValues';
A relative of map, designed for use with objects.
Produces a new Object by mapping each value of obj through the iteratee
function. The iteratee is called each value and key from obj and a
callback for when it has finished processing. Each of these callbacks takes
two arguments: an error, and the transformed item from obj. If iteratee
passes an error to its callback, the main callback (for the mapValues
function) is immediately called with the error.
Note, the order of the keys in the result is not guaranteed.  The keys will
be roughly in the order they complete, (but this is very engine-specific)
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | obj | Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | 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). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs.resultis a new object consisting
of each key fromobj, with each transformed value on the right-hand side.
Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // file1.txt is a file that is 1000 bytes in size
// file2.txt is a file that is 2000 bytes in size
// file3.txt is a file that is 3000 bytes in size
// file4.txt does not exist
const fileMap = {
    f1: 'file1.txt',
    f2: 'file2.txt',
    f3: 'file3.txt'
};
const withMissingFileMap = {
    f1: 'file1.txt',
    f2: 'file2.txt',
    f3: 'file4.txt'
};
// asynchronous function that returns the file size in bytes
function getFileSizeInBytes(file, key, callback) {
    fs.stat(file, function(err, stat) {
        if (err) {
            return callback(err);
        }
        callback(null, stat.size);
    });
}
// Using callbacks
async.mapValues(fileMap, getFileSizeInBytes, function(err, result) {
    if (err) {
        console.log(err);
    } else {
        console.log(result);
        // result is now a map of file size in bytes for each file, e.g.
        // {
        //     f1: 1000,
        //     f2: 2000,
        //     f3: 3000
        // }
    }
});
// Error handling
async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) {
    if (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
    } else {
        console.log(result);
    }
});
// Using Promises
async.mapValues(fileMap, getFileSizeInBytes)
.then( result => {
    console.log(result);
    // result is now a map of file size in bytes for each file, e.g.
    // {
    //     f1: 1000,
    //     f2: 2000,
    //     f3: 3000
    // }
}).catch (err => {
    console.log(err);
});
// Error Handling
async.mapValues(withMissingFileMap, getFileSizeInBytes)
.then( result => {
    console.log(result);
}).catch (err => {
    console.log(err);
    // [ Error: ENOENT: no such file or directory ]
});
// Using async/await
async () => {
    try {
        let result = await async.mapValues(fileMap, getFileSizeInBytes);
        console.log(result);
        // result is now a map of file size in bytes for each file, e.g.
        // {
        //     f1: 1000,
        //     f2: 2000,
        //     f3: 3000
        // }
    }
    catch (err) {
        console.log(err);
    }
}
// Error Handling
async () => {
    try {
        let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes);
        console.log(result);
    }
    catch (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) mapValuesLimit(obj, limit, iteratee, callbackopt) → {Promise}
    
    import mapValuesLimit from 'async/mapValuesLimit';
The same as mapValues but runs a maximum of limit async operations at a
time.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | obj | Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | 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). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs.resultis a new object consisting
of each key fromobj, with each transformed value on the right-hand side.
Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) mapValuesSeries(obj, iteratee, callbackopt) → {Promise}
    
    import mapValuesSeries from 'async/mapValuesSeries';
The same as mapValues but runs only a single async operation at a time.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | obj | Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | 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). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called when all iterateefunctions have finished, or an error occurs.resultis a new object consisting
of each key fromobj, with each transformed value on the right-hand side.
Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) reduce(coll, memo, iteratee, callbackopt) → {Promise}
    
    import reduce from 'async/reduce';
Reduces coll into a single value using an async iteratee to return each
successive step. memo is the initial state of the reduction. This function
only operates in series.
For performance reasons, it may make sense to split a call to this function
into a parallel map, and then use the normal Array.prototype.reduce on the
results. This function is for situations where each step in the reduction
needs to be async; if you can get the data before reducing it, then it's
probably a good idea to do so.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | memo | * | The initial state of the reduction. | 
    
        
            
                | iteratee | AsyncFunction | A function applied to each item in the
array to produce the next step in the reduction.
The iterateeshould complete with the next state of the reduction.
If the iteratee complete with an error, the reduction is stopped and the
maincallbackis immediately called with the error.
Invoked with (memo, item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Result is the reduced value. Invoked with
(err, result). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // file1.txt is a file that is 1000 bytes in size
// file2.txt is a file that is 2000 bytes in size
// file3.txt is a file that is 3000 bytes in size
// file4.txt does not exist
const fileList = ['file1.txt','file2.txt','file3.txt'];
const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt'];
// asynchronous function that computes the file size in bytes
// file size is added to the memoized value, then returned
function getFileSizeInBytes(memo, file, callback) {
    fs.stat(file, function(err, stat) {
        if (err) {
            return callback(err);
        }
        callback(null, memo + stat.size);
    });
}
// Using callbacks
async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) {
    if (err) {
        console.log(err);
    } else {
        console.log(result);
        // 6000
        // which is the sum of the file sizes of the three files
    }
});
// Error Handling
async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) {
    if (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
    } else {
        console.log(result);
    }
});
// Using Promises
async.reduce(fileList, 0, getFileSizeInBytes)
.then( result => {
    console.log(result);
    // 6000
    // which is the sum of the file sizes of the three files
}).catch( err => {
    console.log(err);
});
// Error Handling
async.reduce(withMissingFileList, 0, getFileSizeInBytes)
.then( result => {
    console.log(result);
}).catch( err => {
    console.log(err);
    // [ Error: ENOENT: no such file or directory ]
});
// Using async/await
async () => {
    try {
        let result = await async.reduce(fileList, 0, getFileSizeInBytes);
        console.log(result);
        // 6000
        // which is the sum of the file sizes of the three files
    }
    catch (err) {
        console.log(err);
    }
}
// Error Handling
async () => {
    try {
        let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes);
        console.log(result);
    }
    catch (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) reduceRight(array, memo, iteratee, callbackopt) → {Promise}
    
    import reduceRight from 'async/reduceRight';
Same as reduce, only operates on array in reverse order.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | array | Array | A collection to iterate over. | 
    
        
            
                | memo | * | The initial state of the reduction. | 
    
        
            
                | iteratee | AsyncFunction | A function applied to each item in the
array to produce the next step in the reduction.
The iterateeshould complete with the next state of the reduction.
If the iteratee complete with an error, the reduction is stopped and the
maincallbackis immediately called with the error.
Invoked with (memo, item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Result is the reduced value. Invoked with
(err, result). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) reject(coll, iteratee, callbackopt) → {Promise}
    
    import reject from 'async/reject';
The opposite of filter. Removes values that pass an async truth test.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | function | An async truth test to apply to each item in
coll.
The should complete with a boolean value as itsresult.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // dir1 is a directory that contains file1.txt, file2.txt
// dir2 is a directory that contains file3.txt, file4.txt
// dir3 is a directory that contains file5.txt
const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];
// asynchronous function that checks if a file exists
function fileExists(file, callback) {
   fs.access(file, fs.constants.F_OK, (err) => {
       callback(null, !err);
   });
}
// Using callbacks
async.reject(fileList, fileExists, function(err, results) {
   // [ 'dir3/file6.txt' ]
   // results now equals an array of the non-existing files
});
// Using Promises
async.reject(fileList, fileExists)
.then( results => {
    console.log(results);
    // [ 'dir3/file6.txt' ]
    // results now equals an array of the non-existing files
}).catch( err => {
    console.log(err);
});
// Using async/await
async () => {
    try {
        let results = await async.reject(fileList, fileExists);
        console.log(results);
        // [ 'dir3/file6.txt' ]
        // results now equals an array of the non-existing files
    }
    catch (err) {
        console.log(err);
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) rejectLimit(coll, limit, iteratee, callbackopt) → {Promise}
    
    import rejectLimit from 'async/rejectLimit';
The same as reject but runs a maximum of limit async operations at a
time.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | function | An async truth test to apply to each item in
coll.
The should complete with a boolean value as itsresult.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) rejectSeries(coll, iteratee, callbackopt) → {Promise}
    
    import rejectSeries from 'async/rejectSeries';
The same as reject but runs only a single async operation at a time.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | function | An async truth test to apply to each item in
coll.
The should complete with a boolean value as itsresult.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback is passed
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) some(coll, iteratee, callbackopt) → {Promise}
    
    import some from 'async/some';
Returns true if at least one element in the coll satisfies an async test.
If any iteratee call returns true, the main callback is immediately
called.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async truth test to apply to each item
in the collections in parallel.
The iteratee should complete with a boolean resultvalue.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called as soon as any
iteratee returns true, or after all the iteratee functions have finished.
Result will be eithertrueorfalsedepending on the values of the async
tests. Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // dir1 is a directory that contains file1.txt, file2.txt
// dir2 is a directory that contains file3.txt, file4.txt
// dir3 is a directory that contains file5.txt
// dir4 does not exist
// asynchronous function that checks if a file exists
function fileExists(file, callback) {
   fs.access(file, fs.constants.F_OK, (err) => {
       callback(null, !err);
   });
}
// Using callbacks
async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists,
   function(err, result) {
       console.log(result);
       // true
       // result is true since some file in the list exists
   }
);
async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists,
   function(err, result) {
       console.log(result);
       // false
       // result is false since none of the files exists
   }
);
// Using Promises
async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists)
.then( result => {
    console.log(result);
    // true
    // result is true since some file in the list exists
}).catch( err => {
    console.log(err);
});
async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists)
.then( result => {
    console.log(result);
    // false
    // result is false since none of the files exists
}).catch( err => {
    console.log(err);
});
// Using async/await
async () => {
    try {
        let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists);
        console.log(result);
        // true
        // result is true since some file in the list exists
    }
    catch (err) {
        console.log(err);
    }
}
async () => {
    try {
        let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists);
        console.log(result);
        // false
        // result is false since none of the files exists
    }
    catch (err) {
        console.log(err);
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
(static) someLimit(coll, limit, iteratee, callbackopt) → {Promise}
    
    import someLimit from 'async/someLimit';
The same as some but runs a maximum of limit async operations at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | limit | number | The maximum number of async operations at a time. | 
    
        
            
                | iteratee | AsyncFunction | An async truth test to apply to each item
in the collections in parallel.
The iteratee should complete with a boolean resultvalue.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called as soon as any
iteratee returns true, or after all the iteratee functions have finished.
Result will be eithertrueorfalsedepending on the values of the async
tests. Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) someSeries(coll, iteratee, callbackopt) → {Promise}
    
    import someSeries from 'async/someSeries';
The same as some but runs only a single async operation at a time.
 
    
        - Alias:
Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async truth test to apply to each item
in the collections in series.
The iteratee should complete with a boolean resultvalue.
Invoked with (item, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called as soon as any
iteratee returns true, or after all the iteratee functions have finished.
Result will be eithertrueorfalsedepending on the values of the async
tests. Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
- See:
- 
        
    
(static) sortBy(coll, iteratee, callback) → {Promise}
    
    import sortBy from 'async/sortBy';
Sorts a list by the results of running each coll value through an async
iteratee.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | iteratee | AsyncFunction | An async function to apply to each item in
coll.
The iteratee should complete with a value to use as the sort criteria as
itsresult.
Invoked with (item, callback). | 
    
        
            
                | callback | function | A callback which is called after all the
iterateefunctions have finished, or an error occurs. Results is the items
from the originalcollsorted by the values returned by theiterateecalls. Invoked with (err, results). | 
    
    
Returns:
        
    a promise, if no callback passed
 
    - 
        Type
    
- 
        
Promise
    
Example
    
    // bigfile.txt is a file that is 251100 bytes in size
// mediumfile.txt is a file that is 11000 bytes in size
// smallfile.txt is a file that is 121 bytes in size
// asynchronous function that returns the file size in bytes
function getFileSizeInBytes(file, callback) {
    fs.stat(file, function(err, stat) {
        if (err) {
            return callback(err);
        }
        callback(null, stat.size);
    });
}
// Using callbacks
async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes,
    function(err, results) {
        if (err) {
            console.log(err);
        } else {
            console.log(results);
            // results is now the original array of files sorted by
            // file size (ascending by default), e.g.
            // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']
        }
    }
);
// By modifying the callback parameter the
// sorting order can be influenced:
// ascending order
async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) {
    getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {
        if (getFileSizeErr) return callback(getFileSizeErr);
        callback(null, fileSize);
    });
}, function(err, results) {
        if (err) {
            console.log(err);
        } else {
            console.log(results);
            // results is now the original array of files sorted by
            // file size (ascending by default), e.g.
            // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']
        }
    }
);
// descending order
async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) {
    getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {
        if (getFileSizeErr) {
            return callback(getFileSizeErr);
        }
        callback(null, fileSize * -1);
    });
}, function(err, results) {
        if (err) {
            console.log(err);
        } else {
            console.log(results);
            // results is now the original array of files sorted by
            // file size (ascending by default), e.g.
            // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt']
        }
    }
);
// Error handling
async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes,
    function(err, results) {
        if (err) {
            console.log(err);
            // [ Error: ENOENT: no such file or directory ]
        } else {
            console.log(results);
        }
    }
);
// Using Promises
async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes)
.then( results => {
    console.log(results);
    // results is now the original array of files sorted by
    // file size (ascending by default), e.g.
    // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']
}).catch( err => {
    console.log(err);
});
// Error handling
async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes)
.then( results => {
    console.log(results);
}).catch( err => {
    console.log(err);
    // [ Error: ENOENT: no such file or directory ]
});
// Using async/await
(async () => {
    try {
        let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);
        console.log(results);
        // results is now the original array of files sorted by
        // file size (ascending by default), e.g.
        // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']
    }
    catch (err) {
        console.log(err);
    }
})();
// Error handling
async () => {
    try {
        let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);
        console.log(results);
    }
    catch (err) {
        console.log(err);
        // [ Error: ENOENT: no such file or directory ]
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source:
    import transform from 'async/transform';
A relative of reduce.  Takes an Object or Array, and iterates over each
element in parallel, each step potentially mutating an accumulator value.
The type of the accumulator defaults to the type of collection passed in.
 
    Parameters:
    
    
    
        
        | Name | Type | Description | 
    
    
    
        
            
                | coll | Array
|
Iterable
|
AsyncIterable
|
Object | A collection to iterate over. | 
    
        
            
                | accumulator | *
            
            
                <optional> | The initial state of the transform.  If omitted,
it will default to an empty Object or Array, depending on the type of coll | 
    
        
            
                | iteratee | AsyncFunction | A function applied to each item in the
collection that potentially modifies the accumulator.
Invoked with (accumulator, item, key, callback). | 
    
        
            
                | callback | function
            
            
                <optional> | A callback which is called after all the
iterateefunctions have finished. Result is the transformed accumulator.
Invoked with (err, result). | 
    
    
Returns:
        
    a promise, if no callback provided
 
    - 
        Type
    
- 
        
Promise
    
Examples
    
    // file1.txt is a file that is 1000 bytes in size
// file2.txt is a file that is 2000 bytes in size
// file3.txt is a file that is 3000 bytes in size
// helper function that returns human-readable size format from bytes
function formatBytes(bytes, decimals = 2) {
  // implementation not included for brevity
  return humanReadbleFilesize;
}
const fileList = ['file1.txt','file2.txt','file3.txt'];
// asynchronous function that returns the file size, transformed to human-readable format
// e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.
function transformFileSize(acc, value, key, callback) {
    fs.stat(value, function(err, stat) {
        if (err) {
            return callback(err);
        }
        acc[key] = formatBytes(stat.size);
        callback(null);
    });
}
// Using callbacks
async.transform(fileList, transformFileSize, function(err, result) {
    if(err) {
        console.log(err);
    } else {
        console.log(result);
        // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]
    }
});
// Using Promises
async.transform(fileList, transformFileSize)
.then(result => {
    console.log(result);
    // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]
}).catch(err => {
    console.log(err);
});
// Using async/await
(async () => {
    try {
        let result = await async.transform(fileList, transformFileSize);
        console.log(result);
        // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]
    }
    catch (err) {
        console.log(err);
    }
})();
    // file1.txt is a file that is 1000 bytes in size
// file2.txt is a file that is 2000 bytes in size
// file3.txt is a file that is 3000 bytes in size
// helper function that returns human-readable size format from bytes
function formatBytes(bytes, decimals = 2) {
  // implementation not included for brevity
  return humanReadbleFilesize;
}
const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' };
// asynchronous function that returns the file size, transformed to human-readable format
// e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.
function transformFileSize(acc, value, key, callback) {
    fs.stat(value, function(err, stat) {
        if (err) {
            return callback(err);
        }
        acc[key] = formatBytes(stat.size);
        callback(null);
    });
}
// Using callbacks
async.transform(fileMap, transformFileSize, function(err, result) {
    if(err) {
        console.log(err);
    } else {
        console.log(result);
        // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }
    }
});
// Using Promises
async.transform(fileMap, transformFileSize)
.then(result => {
    console.log(result);
    // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }
}).catch(err => {
    console.log(err);
});
// Using async/await
async () => {
    try {
        let result = await async.transform(fileMap, transformFileSize);
        console.log(result);
        // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }
    }
    catch (err) {
        console.log(err);
    }
}
    
    
    
    
    
    
    
    
    
    
    
    
    
    - Source: