
\begin{DoxyItemize}
\item Updated lodash to squelch a security warning (\#1675)
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3296}{}\doxysection{v2.\+6.\+2}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3296}

\begin{DoxyItemize}
\item Updated lodash to squelch a security warning (\#1620)
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3297}{}\doxysection{v2.\+6.\+1}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3297}

\begin{DoxyItemize}
\item Updated lodash to prevent {\ttfamily npm audit} warnings. (\#1532, \#1533)
\item Made {\ttfamily async-\/es} more optimized for webpack users (\#1517)
\item Fixed a stack overflow with large collections and a synchronous iterator (\#1514)
\item Various small fixes/chores (\#1505, \#1511, \#1527, \#1530)
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3298}{}\doxysection{v2.\+6.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3298}

\begin{DoxyItemize}
\item Added missing aliases for many methods. Previously, you could not (e.\+g.) `require(\textquotesingle{}async/find'){\ttfamily or use}async.\+any\+Limit$<$tt$>$. (\#1483)
\item Improvedqueue\`{} performance. (\#1448, \#1454)
\item Add missing sourcemap (\#1452, \#1453)
\item Various doc updates (\#1448, \#1471, \#1483)
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3299}{}\doxysection{v2.\+5.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3299}

\begin{DoxyItemize}
\item Added {\ttfamily concat\+Limit}, the {\ttfamily Limit} equivalent of \href{https://caolan.github.io/async/docs.html\#concat}{\texttt{ {\ttfamily concat}}} (\href{https://github.com/caolan/async/issues/1426}{\texttt{ \#1426}}, \href{https://github.com/caolan/async/pull/1430}{\texttt{ \#1430}})
\item {\ttfamily concat} improvements\+: it now preserves order, handles falsy values and the {\ttfamily iteratee} callback takes a variable number of arguments (\href{https://github.com/caolan/async/issues/1437}{\texttt{ \#1437}}, \href{https://github.com/caolan/async/pull/1436}{\texttt{ \#1436}})
\item Fixed an issue in {\ttfamily queue} where there was a size discrepancy between {\ttfamily workers\+List().length} and {\ttfamily running()} (\href{https://github.com/caolan/async/issues/1428}{\texttt{ \#1428}}, \href{https://github.com/caolan/async/pull/1429}{\texttt{ \#1429}})
\item Various doc fixes (\href{https://github.com/caolan/async/issues/1422}{\texttt{ \#1422}}, \href{https://github.com/caolan/async/pull/1424}{\texttt{ \#1424}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3300}{}\doxysection{v2.\+4.\+1}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3300}

\begin{DoxyItemize}
\item Fixed a bug preventing functions wrapped with {\ttfamily timeout()} from being re-\/used. (\href{https://github.com/caolan/async/issues/1418}{\texttt{ \#1418}}, \href{https://github.com/caolan/async/issues/1419}{\texttt{ \#1419}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3301}{}\doxysection{v2.\+4.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3301}

\begin{DoxyItemize}
\item Added {\ttfamily try\+Each}, for running async functions in parallel, where you only expect one to succeed. (\href{https://github.com/caolan/async/issues/1365}{\texttt{ \#1365}}, \href{https://github.com/caolan/async/issues/687}{\texttt{ \#687}})
\item Improved performance, most notably in {\ttfamily parallel} and {\ttfamily waterfall} (\href{https://github.com/caolan/async/issues/1395}{\texttt{ \#1395}})
\item Added {\ttfamily queue.\+remove()}, for removing items in a {\ttfamily queue} (\href{https://github.com/caolan/async/issues/1397}{\texttt{ \#1397}}, \href{https://github.com/caolan/async/issues/1391}{\texttt{ \#1391}})
\item Fixed using {\ttfamily eval}, preventing Async from running in pages with Content Security Policy (\href{https://github.com/caolan/async/issues/1404}{\texttt{ \#1404}}, \href{https://github.com/caolan/async/issues/1403}{\texttt{ \#1403}})
\item Fixed errors thrown in an {\ttfamily asyncify}ed function\textquotesingle{}s callback being caught by the underlying Promise (\href{https://github.com/caolan/async/issues/1408}{\texttt{ \#1408}})
\item Fixed timing of {\ttfamily queue.\+empty()} (\href{https://github.com/caolan/async/issues/1367}{\texttt{ \#1367}})
\item Various doc fixes (\href{https://github.com/caolan/async/issues/1314}{\texttt{ \#1314}}, \href{https://github.com/caolan/async/issues/1394}{\texttt{ \#1394}}, \href{https://github.com/caolan/async/issues/1412}{\texttt{ \#1412}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3302}{}\doxysection{v2.\+3.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3302}

\begin{DoxyItemize}
\item Added support for ES2017 {\ttfamily async} functions. Wherever you can pass a Node-\/style/\+CPS function that uses a callback, you can also pass an {\ttfamily async} function. Previously, you had to wrap {\ttfamily async} functions with {\ttfamily asyncify}. The caveat is that it will only work if {\ttfamily async} functions are supported natively in your environment, transpiled implementations can\textquotesingle{}t be detected. (\href{https://github.com/caolan/async/issues/1386}{\texttt{ \#1386}}, \href{https://github.com/caolan/async/issues/1390}{\texttt{ \#1390}})
\item Small doc fix (\href{https://github.com/caolan/async/issues/1392}{\texttt{ \#1392}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3303}{}\doxysection{v2.\+2.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3303}

\begin{DoxyItemize}
\item Added {\ttfamily group\+By}, and the {\ttfamily Series}/{\ttfamily Limit} equivalents, analogous to \href{http://lodash.com/docs\#groupBy}{\texttt{ {\ttfamily \+\_\+.\+group\+By}}} (\href{https://github.com/caolan/async/issues/1364}{\texttt{ \#1364}})
\item Fixed {\ttfamily transform} bug when {\ttfamily callback} was not passed (\href{https://github.com/caolan/async/issues/1381}{\texttt{ \#1381}})
\item Added note about {\ttfamily reflect} to {\ttfamily parallel} docs (\href{https://github.com/caolan/async/issues/1385}{\texttt{ \#1385}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3304}{}\doxysection{v2.\+1.\+5}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3304}

\begin{DoxyItemize}
\item Fix {\ttfamily auto} bug when function names collided with Array.\+prototype (\href{https://github.com/caolan/async/issues/1358}{\texttt{ \#1358}})
\item Improve some error messages (\href{https://github.com/caolan/async/issues/1349}{\texttt{ \#1349}})
\item Avoid stack overflow case in queue
\item Fixed an issue in {\ttfamily some}, {\ttfamily every} and {\ttfamily find} where processing would continue after the result was determined.
\item Cleanup implementations of {\ttfamily some}, {\ttfamily every} and {\ttfamily find}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3305}{}\doxysection{v2.\+1.\+3}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3305}

\begin{DoxyItemize}
\item Make bundle size smaller
\item Create optimized hotpath for {\ttfamily filter} in array case.
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3306}{}\doxysection{v2.\+1.\+2}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3306}

\begin{DoxyItemize}
\item Fixed a stackoverflow bug with {\ttfamily detect}, {\ttfamily some}, {\ttfamily every} on large inputs (\href{https://github.com/caolan/async/issues/1293}{\texttt{ \#1293}}).
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3307}{}\doxysection{v2.\+1.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3307}

\begin{DoxyItemize}
\item {\ttfamily retry} and {\ttfamily retryable} now support an optional {\ttfamily error\+Filter} function that determines if the {\ttfamily task} should retry on the error (\href{https://github.com/caolan/async/issues/1256}{\texttt{ \#1256}}, \href{https://github.com/caolan/async/issues/1261}{\texttt{ \#1261}})
\item Optimized array iteration in {\ttfamily race}, {\ttfamily cargo}, {\ttfamily queue}, and {\ttfamily priority\+Queue} (\href{https://github.com/caolan/async/issues/1253}{\texttt{ \#1253}})
\item Added alias documentation to doc site (\href{https://github.com/caolan/async/issues/1251}{\texttt{ \#1251}}, \href{https://github.com/caolan/async/issues/1254}{\texttt{ \#1254}})
\item Added \href{http://getbootstrap.com/javascript/\#scrollspy}{\texttt{ Boot\+Strap scrollspy}} to docs to highlight in the sidebar the current method being viewed (\href{https://github.com/caolan/async/issues/1289}{\texttt{ \#1289}}, \href{https://github.com/caolan/async/issues/1300}{\texttt{ \#1300}})
\item Various minor doc fixes (\href{https://github.com/caolan/async/issues/1263}{\texttt{ \#1263}}, \href{https://github.com/caolan/async/issues/1264}{\texttt{ \#1264}}, \href{https://github.com/caolan/async/issues/1271}{\texttt{ \#1271}}, \href{https://github.com/caolan/async/issues/1278}{\texttt{ \#1278}}, \href{https://github.com/caolan/async/issues/1280}{\texttt{ \#1280}}, \href{https://github.com/caolan/async/issues/1282}{\texttt{ \#1282}}, \href{https://github.com/caolan/async/issues/1302}{\texttt{ \#1302}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3308}{}\doxysection{v2.\+0.\+1}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3308}

\begin{DoxyItemize}
\item Significantly optimized all iteration based collection methods such as {\ttfamily each}, {\ttfamily map}, {\ttfamily filter}, etc (\href{https://github.com/caolan/async/issues/1245}{\texttt{ \#1245}}, \href{https://github.com/caolan/async/issues/1246}{\texttt{ \#1246}}, \href{https://github.com/caolan/async/issues/1247}{\texttt{ \#1247}}).
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3309}{}\doxysection{v2.\+0.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3309}
Lots of changes here!

First and foremost, we have a slick new \href{https://caolan.github.io/async/}{\texttt{ site for docs}}. Special thanks to \href{https://github.com/hargasinski}{\texttt{ {\bfseries{@hargasinski}}}} for his work converting our old docs to {\ttfamily jsdoc} format and implementing the new website. Also huge ups to \href{https://github.com/ivanseidel}{\texttt{ {\bfseries{@ivanseidel}}}} for designing our new logo. It was a long process for both of these tasks, but I think these changes turned out extraordinary well.

The biggest feature is modularization. You can now {\ttfamily require(\char`\"{}async/series\char`\"{})} to only require the {\ttfamily series} function. Every Async library function is available this way. You still can {\ttfamily require(\char`\"{}async\char`\"{})} to require the entire library, like you could do before.

We also provide Async as a collection of ES2015 modules. You can now `import \{each\} from \textquotesingle{}async-\/es'{\ttfamily or}import waterfall from \textquotesingle{}async-\/es/waterfall\textquotesingle{}\`{}. If you are using only a few Async functions, and are using a ES bundler such as Rollup, this can significantly lower your build size.

Major thanks to \href{github.com/Kikobeats}{\texttt{ {\bfseries{@\+Kikobeats}}}}, \href{github.com/aearly}{\texttt{ {\bfseries{@aearly}}}} and \href{github.com/megawac}{\texttt{ {\bfseries{@megawac}}}} for doing the majority of the modularization work, as well as \href{github.com/jdalton}{\texttt{ {\bfseries{@jdalton}}}} and \href{github.com/Rich-Harris}{\texttt{ {\bfseries{@\+Rich-\/Harris}}}} for advisory work on the general modularization strategy.

Another one of the general themes of the 2.\+0 release is standardization of what an \char`\"{}async\char`\"{} function is. We are now more strictly following the node-\/style continuation passing style. That is, an async function is a function that\+:


\begin{DoxyEnumerate}
\item Takes a variable number of arguments
\item The last argument is always a callback
\item The callback can accept any number of arguments
\item The first argument passed to the callback will be treated as an error result, if the argument is truthy
\item Any number of result arguments can be passed after the \char`\"{}error\char`\"{} argument
\item The callback is called once and exactly once, either on the same tick or later tick of the Java\+Script event loop.
\end{DoxyEnumerate}

There were several cases where Async accepted some functions that did not strictly have these properties, most notably {\ttfamily auto}, {\ttfamily every}, {\ttfamily some}, {\ttfamily filter}, {\ttfamily reject} and {\ttfamily detect}.

Another theme is performance. We have eliminated internal deferrals in all cases where they make sense. For example, in {\ttfamily waterfall} and {\ttfamily auto}, there was a {\ttfamily set\+Immediate} between each task -- these deferrals have been removed. A {\ttfamily set\+Immediate} call can add up to 1ms of delay. This might not seem like a lot, but it can add up if you are using many Async functions in the course of processing a HTTP request, for example. Nearly all asynchronous functions that do I/O already have some sort of deferral built in, so the extra deferral is unnecessary. The trade-\/off of this change is removing our built-\/in stack-\/overflow defense. Many synchronous callback calls in series can quickly overflow the JS call stack. If you do have a function that is sometimes synchronous (calling its callback on the same tick), and are running into stack overflows, wrap it with {\ttfamily async.\+ensure\+Async()}.

Another big performance win has been re-\/implementing {\ttfamily queue}, {\ttfamily cargo}, and {\ttfamily priority\+Queue} with \href{https://en.wikipedia.org/wiki/Doubly_linked_list}{\texttt{ doubly linked lists}} instead of arrays. This has lead to queues being an order of \href{https://github.com/caolan/async/pull/1205}{\texttt{ magnitude faster on large sets of tasks}}.\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3310}{}\doxysubsection{New Features}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3310}

\begin{DoxyItemize}
\item Async is now modularized. Individual functions can be {\ttfamily require()}d from the main package. (`require(\textquotesingle{}async/auto'){\ttfamily ) (\mbox{[}\#984\mbox{]}(\href{https://github.com/caolan/async/issues/984}{\texttt{ https\+://github.\+com/caolan/async/issues/984}}), \mbox{[}\#996\mbox{]}(\href{https://github.com/caolan/async/issues/996}{\texttt{ https\+://github.\+com/caolan/async/issues/996}}))}
\item {\ttfamily Async is also available as a collection of ES2015 modules in the new}async-\/es{\ttfamily package. (}import \{for\+Each\+Series\} from \textquotesingle{}async-\/es\textquotesingle{}{\ttfamily ) (\mbox{[}\#984\mbox{]}(\href{https://github.com/caolan/async/issues/984}{\texttt{ https\+://github.\+com/caolan/async/issues/984}}), \mbox{[}\#996\mbox{]}(\href{https://github.com/caolan/async/issues/996}{\texttt{ https\+://github.\+com/caolan/async/issues/996}}))}
\item {\ttfamily Added}race{\ttfamily , analogous to}Promise.\+race(){\ttfamily . It will run an array of async tasks in parallel and will call its callback with the result of the first task to respond. (\mbox{[}\#568\mbox{]}(\href{https://github.com/caolan/async/issues/568}{\texttt{ https\+://github.\+com/caolan/async/issues/568}}), \mbox{[}\#1038\mbox{]}(\href{https://github.com/caolan/async/issues/1038}{\texttt{ https\+://github.\+com/caolan/async/issues/1038}}))}
\item {\ttfamily Collection methods now accept ES2015 iterators. Maps, Sets, and anything that implements the iterator spec can now be passed directly to}each{\ttfamily ,}map{\ttfamily ,}parallel{\ttfamily , etc.. (\mbox{[}\#579\mbox{]}(\href{https://github.com/caolan/async/issues/579}{\texttt{ https\+://github.\+com/caolan/async/issues/579}}), \mbox{[}\#839\mbox{]}(\href{https://github.com/caolan/async/issues/839}{\texttt{ https\+://github.\+com/caolan/async/issues/839}}), \mbox{[}\#1074\mbox{]}(\href{https://github.com/caolan/async/issues/1074}{\texttt{ https\+://github.\+com/caolan/async/issues/1074}}))}
\item {\ttfamily Added}map\+Values{\ttfamily , for mapping over the properties of an object and returning an object with the same keys. (\mbox{[}\#1157\mbox{]}(\href{https://github.com/caolan/async/issues/1157}{\texttt{ https\+://github.\+com/caolan/async/issues/1157}}), \mbox{[}\#1177\mbox{]}(\href{https://github.com/caolan/async/issues/1177}{\texttt{ https\+://github.\+com/caolan/async/issues/1177}}))}
\item {\ttfamily Added}timeout{\ttfamily , a wrapper for an async function that will make the task time-\/out after the specified time. (\mbox{[}\#1007\mbox{]}(\href{https://github.com/caolan/async/issues/1007}{\texttt{ https\+://github.\+com/caolan/async/issues/1007}}), \mbox{[}\#1027\mbox{]}(\href{https://github.com/caolan/async/issues/1027}{\texttt{ https\+://github.\+com/caolan/async/issues/1027}}))}
\item {\ttfamily Added}reflect{\ttfamily and}reflect\+All{\ttfamily , analagous to \mbox{[}}Promise.\+reflect(){\ttfamily \mbox{]}(\href{http://bluebirdjs.com/docs/api/reflect.html}{\texttt{ http\+://bluebirdjs.\+com/docs/api/reflect.\+html}}), a wrapper for async tasks that always succeeds, by gathering results and errors into an object. (\mbox{[}\#942\mbox{]}(\href{https://github.com/caolan/async/issues/942}{\texttt{ https\+://github.\+com/caolan/async/issues/942}}), \mbox{[}\#1012\mbox{]}(\href{https://github.com/caolan/async/issues/1012}{\texttt{ https\+://github.\+com/caolan/async/issues/1012}}), \mbox{[}\#1095\mbox{]}(\href{https://github.com/caolan/async/issues/1095}{\texttt{ https\+://github.\+com/caolan/async/issues/1095}})) -\/}constant{\ttfamily supports dynamic arguments -\/-\/ it will now always use its last argument as the callback. (\mbox{[}\#1016\mbox{]}(\href{https://github.com/caolan/async/issues/1016}{\texttt{ https\+://github.\+com/caolan/async/issues/1016}}), \mbox{[}\#1052\mbox{]}(\href{https://github.com/caolan/async/issues/1052}{\texttt{ https\+://github.\+com/caolan/async/issues/1052}})) -\/}set\+Immediate{\ttfamily and}next\+Tick{\ttfamily now support arguments to partially apply to the deferred function, like the node-\/native versions do. (\mbox{[}\#940\mbox{]}(\href{https://github.com/caolan/async/issues/940}{\texttt{ https\+://github.\+com/caolan/async/issues/940}}), \mbox{[}\#1053\mbox{]}(\href{https://github.com/caolan/async/issues/1053}{\texttt{ https\+://github.\+com/caolan/async/issues/1053}})) -\/}auto{\ttfamily now supports resolving cyclic dependencies using \mbox{[}Kahn\textquotesingle{}s algorithm\mbox{]}(\href{https://en.wikipedia.org/wiki/Topological_sorting}{\texttt{ https\+://en.\+wikipedia.\+org/wiki/\+Topological\+\_\+sorting}}\#Kahn.\+27s\+\_\+algorithm) (\mbox{[}\#1140\mbox{]}(\href{https://github.com/caolan/async/issues/1140}{\texttt{ https\+://github.\+com/caolan/async/issues/1140}})).}
\item {\ttfamily Added}auto\+Inject{\ttfamily , a relative of}auto{\ttfamily that automatically spreads a task\textquotesingle{}s dependencies as arguments to the task function. (\mbox{[}\#608\mbox{]}(\href{https://github.com/caolan/async/issues/608}{\texttt{ https\+://github.\+com/caolan/async/issues/608}}), \mbox{[}\#1055\mbox{]}(\href{https://github.com/caolan/async/issues/1055}{\texttt{ https\+://github.\+com/caolan/async/issues/1055}}), \mbox{[}\#1099\mbox{]}(\href{https://github.com/caolan/async/issues/1099}{\texttt{ https\+://github.\+com/caolan/async/issues/1099}}), \mbox{[}\#1100\mbox{]}(\href{https://github.com/caolan/async/issues/1100}{\texttt{ https\+://github.\+com/caolan/async/issues/1100}}))}
\item {\ttfamily You can now limit the concurrency of}auto{\ttfamily tasks. (\mbox{[}\#635\mbox{]}(\href{https://github.com/caolan/async/issues/635}{\texttt{ https\+://github.\+com/caolan/async/issues/635}}), \mbox{[}\#637\mbox{]}(\href{https://github.com/caolan/async/issues/637}{\texttt{ https\+://github.\+com/caolan/async/issues/637}}))}
\item {\ttfamily Added}retryable{\ttfamily , a relative of}retry{\ttfamily that wraps an async function, making it retry when called. (\mbox{[}\#1058\mbox{]}(\href{https://github.com/caolan/async/issues/1058}{\texttt{ https\+://github.\+com/caolan/async/issues/1058}})) -\/}retry{\ttfamily now supports specifying a function that determines the next time interval, useful for exponential backoff, logging and other retry strategies. (\mbox{[}\#1161\mbox{]}(\href{https://github.com/caolan/async/issues/1161}{\texttt{ https\+://github.\+com/caolan/async/issues/1161}})) -\/}retry{\ttfamily will now pass all of the arguments the task function was resolved with to the callback (\mbox{[}\#1231\mbox{]}(\href{https://github.com/caolan/async/issues/1231}{\texttt{ https\+://github.\+com/caolan/async/issues/1231}})).}
\item {\ttfamily Added}q.\+unsaturated$<$tt$>$-\/-\/ callback called when aqueue{\ttfamily \textquotesingle{}s number of running workers falls below a threshold. (\mbox{[}\#868\mbox{]}(\href{https://github.com/caolan/async/issues/868}{\texttt{ https\+://github.\+com/caolan/async/issues/868}}), \mbox{[}\#1030\mbox{]}(\href{https://github.com/caolan/async/issues/1030}{\texttt{ https\+://github.\+com/caolan/async/issues/1030}}), \mbox{[}\#1033\mbox{]}(\href{https://github.com/caolan/async/issues/1033}{\texttt{ https\+://github.\+com/caolan/async/issues/1033}}), \mbox{[}\#1034\mbox{]}(\href{https://github.com/caolan/async/issues/1034}{\texttt{ https\+://github.\+com/caolan/async/issues/1034}}))}
\item {\ttfamily Added}q.\+error$<$tt$>$-\/-\/ a callback called whenever aqueue{\ttfamily task calls its callback with an error. (\mbox{[}\#1170\mbox{]}(\href{https://github.com/caolan/async/issues/1170}{\texttt{ https\+://github.\+com/caolan/async/issues/1170}})) -\/}apply\+Each{\ttfamily and}apply\+Each\+Series\`{} now pass results to the final callback. (\href{https://github.com/caolan/async/issues/1088}{\texttt{ \#1088}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3311}{}\doxysubsection{Breaking changes}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3311}

\begin{DoxyItemize}
\item Calling a callback more than once is considered an error, and an error will be thrown. This had an explicit breaking change in {\ttfamily waterfall}. If you were relying on this behavior, you should more accurately represent your control flow as an event emitter or stream. (\href{https://github.com/caolan/async/issues/814}{\texttt{ \#814}}, \href{https://github.com/caolan/async/issues/815}{\texttt{ \#815}}, \href{https://github.com/caolan/async/issues/1048}{\texttt{ \#1048}}, \href{https://github.com/caolan/async/issues/1050}{\texttt{ \#1050}})
\item {\ttfamily auto} task functions now always take the callback as the last argument. If a task has dependencies, the {\ttfamily results} object will be passed as the first argument. To migrate old task functions, wrap them with \href{https://lodash.com/docs\#flip}{\texttt{ {\ttfamily \+\_\+.\+flip}}} (\href{https://github.com/caolan/async/issues/1036}{\texttt{ \#1036}}, \href{https://github.com/caolan/async/issues/1042}{\texttt{ \#1042}})
\item Internal {\ttfamily set\+Immediate} calls have been refactored away. This may make existing flows vulnerable to stack overflows if you use many synchronous functions in series. Use {\ttfamily ensure\+Async} to work around this. (\href{https://github.com/caolan/async/issues/696}{\texttt{ \#696}}, \href{https://github.com/caolan/async/issues/704}{\texttt{ \#704}}, \href{https://github.com/caolan/async/issues/1049}{\texttt{ \#1049}}, \href{https://github.com/caolan/async/issues/1050}{\texttt{ \#1050}})
\item {\ttfamily map} used to return an object when iterating over an object. {\ttfamily map} now always returns an array, like in other libraries. The previous object behavior has been split out into {\ttfamily map\+Values}. (\href{https://github.com/caolan/async/issues/1157}{\texttt{ \#1157}}, \href{https://github.com/caolan/async/issues/1177}{\texttt{ \#1177}})
\item {\ttfamily filter}, {\ttfamily reject}, {\ttfamily some}, {\ttfamily every}, {\ttfamily detect} and their families like {\ttfamily \{METHOD\}Series} and {\ttfamily \{METHOD\}Limit} now expect an error as the first callback argument, rather than just a simple boolean. Pass {\ttfamily null} as the first argument, or use {\ttfamily fs.\+access} instead of {\ttfamily fs.\+exists}. (\href{https://github.com/caolan/async/issues/118}{\texttt{ \#118}}, \href{https://github.com/caolan/async/issues/774}{\texttt{ \#774}}, \href{https://github.com/caolan/async/issues/1028}{\texttt{ \#1028}}, \href{https://github.com/caolan/async/issues/1041}{\texttt{ \#1041}})
\item {\ttfamily \{METHOD\}} and {\ttfamily \{METHOD\}Series} are now implemented in terms of {\ttfamily \{METHOD\}Limit}. This is a major internal simplification, and is not expected to cause many problems, but it does subtly affect how functions execute internally. (\href{https://github.com/caolan/async/issues/778}{\texttt{ \#778}}, \href{https://github.com/caolan/async/issues/847}{\texttt{ \#847}})
\item {\ttfamily retry}\textquotesingle{}s callback is now optional. Previously, omitting the callback would partially apply the function, meaning it could be passed directly as a task to {\ttfamily series} or {\ttfamily auto}. The partially applied \char`\"{}control-\/flow\char`\"{} behavior has been separated out into {\ttfamily retryable}. (\href{https://github.com/caolan/async/issues/1054}{\texttt{ \#1054}}, \href{https://github.com/caolan/async/issues/1058}{\texttt{ \#1058}})
\item The test function for {\ttfamily whilst}, {\ttfamily until}, and {\ttfamily during} used to be passed non-\/error args from the iteratee function\textquotesingle{}s callback, but this led to weirdness where the first call of the test function would be passed no args. We have made it so the test function is never passed extra arguments, and only the {\ttfamily do\+Whilst}, {\ttfamily do\+Until}, and {\ttfamily do\+During} functions pass iteratee callback arguments to the test function (\href{https://github.com/caolan/async/issues/1217}{\texttt{ \#1217}}, \href{https://github.com/caolan/async/issues/1224}{\texttt{ \#1224}})
\item The {\ttfamily q.\+tasks} array has been renamed {\ttfamily q.\+\_\+tasks} and is now implemented as a doubly linked list (DLL). Any code that used to interact with this array will need to be updated to either use the provided helpers or support DLLs (\href{https://github.com/caolan/async/issues/1205}{\texttt{ \#1205}}).
\item The timing of the {\ttfamily q.\+saturated()} callback in a {\ttfamily queue} has been modified to better reflect when tasks pushed to the queue will start queueing. (\href{https://github.com/caolan/async/issues/724}{\texttt{ \#724}}, \href{https://github.com/caolan/async/issues/1078}{\texttt{ \#1078}})
\item Removed {\ttfamily iterator} method in favour of \href{https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators}{\texttt{ ES2015 iterator protocol}} which natively supports arrays (\href{https://github.com/caolan/async/issues/1237}{\texttt{ \#1237}})
\item Dropped support for Component, Jam, SPM, and Volo (\href{https://github.com/caolan/async/issues/1175}{\texttt{ \#1175}}, \#\href{https://github.com/caolan/async/issues/176}{\texttt{ \#176}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3312}{}\doxysubsection{Bug Fixes}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3312}

\begin{DoxyItemize}
\item Improved handling of no dependency cases in {\ttfamily auto} \& {\ttfamily auto\+Inject} (\href{https://github.com/caolan/async/issues/1147}{\texttt{ \#1147}}).
\item Fixed a bug where the callback generated by {\ttfamily asyncify} with {\ttfamily Promises} could resolve twice (\href{https://github.com/caolan/async/issues/1197}{\texttt{ \#1197}}).
\item Fixed several documented optional callbacks not actually being optional (\href{https://github.com/caolan/async/issues/1223}{\texttt{ \#1223}}).
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3313}{}\doxysubsection{Other}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3313}

\begin{DoxyItemize}
\item Added {\ttfamily some\+Series} and {\ttfamily every\+Series} for symmetry, as well as a complete set of {\ttfamily any}/{\ttfamily any\+Limit}/{\ttfamily any\+Series} and {\ttfamily all}/{\ttfamily /all\+Lmit}/{\ttfamily all\+Series} aliases.
\item Added {\ttfamily find} as an alias for {\ttfamily detect. (as well as}find\+Limit{\ttfamily and}find\+Series\`{}).
\item Various doc fixes (\href{https://github.com/caolan/async/issues/1005}{\texttt{ \#1005}}, \href{https://github.com/caolan/async/issues/1008}{\texttt{ \#1008}}, \href{https://github.com/caolan/async/issues/1010}{\texttt{ \#1010}}, \href{https://github.com/caolan/async/issues/1015}{\texttt{ \#1015}}, \href{https://github.com/caolan/async/issues/1021}{\texttt{ \#1021}}, \href{https://github.com/caolan/async/issues/1037}{\texttt{ \#1037}}, \href{https://github.com/caolan/async/issues/1039}{\texttt{ \#1039}}, \href{https://github.com/caolan/async/issues/1051}{\texttt{ \#1051}}, \href{https://github.com/caolan/async/issues/1102}{\texttt{ \#1102}}, \href{https://github.com/caolan/async/issues/1107}{\texttt{ \#1107}}, \href{https://github.com/caolan/async/issues/1121}{\texttt{ \#1121}}, \href{https://github.com/caolan/async/issues/1123}{\texttt{ \#1123}}, \href{https://github.com/caolan/async/issues/1129}{\texttt{ \#1129}}, \href{https://github.com/caolan/async/issues/1135}{\texttt{ \#1135}}, \href{https://github.com/caolan/async/issues/1138}{\texttt{ \#1138}}, \href{https://github.com/caolan/async/issues/1141}{\texttt{ \#1141}}, \href{https://github.com/caolan/async/issues/1153}{\texttt{ \#1153}}, \href{https://github.com/caolan/async/issues/1216}{\texttt{ \#1216}}, \href{https://github.com/caolan/async/issues/1217}{\texttt{ \#1217}}, \href{https://github.com/caolan/async/issues/1232}{\texttt{ \#1232}}, \href{https://github.com/caolan/async/issues/1233}{\texttt{ \#1233}}, \href{https://github.com/caolan/async/issues/1236}{\texttt{ \#1236}}, \href{https://github.com/caolan/async/issues/1238}{\texttt{ \#1238}})
\end{DoxyItemize}

Thank you \href{github.com/aearly}{\texttt{ {\bfseries{@aearly}}}} and \href{github.com/megawac}{\texttt{ {\bfseries{@megawac}}}} for taking the lead on version 2 of async.

\DoxyHorRuler{0}
\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3315}{}\doxysection{v1.\+5.\+2}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3315}

\begin{DoxyItemize}
\item Allow using {\ttfamily \char`\"{}constructor\char`\"{}} as an argument in {\ttfamily memoize} (\href{https://github.com/caolan/async/issues/998}{\texttt{ \#998}})
\item Give a better error messsage when {\ttfamily auto} dependency checking fails (\href{https://github.com/caolan/async/issues/994}{\texttt{ \#994}})
\item Various doc updates (\href{https://github.com/caolan/async/issues/936}{\texttt{ \#936}}, \href{https://github.com/caolan/async/issues/956}{\texttt{ \#956}}, \href{https://github.com/caolan/async/issues/979}{\texttt{ \#979}}, \href{https://github.com/caolan/async/issues/1002}{\texttt{ \#1002}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3316}{}\doxysection{v1.\+5.\+1}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3316}

\begin{DoxyItemize}
\item Fix issue with {\ttfamily pause} in {\ttfamily queue} with concurrency enabled (\href{https://github.com/caolan/async/issues/946}{\texttt{ \#946}})
\item {\ttfamily while} and {\ttfamily until} now pass the final result to callback (\href{https://github.com/caolan/async/issues/963}{\texttt{ \#963}})
\item {\ttfamily auto} will properly handle concurrency when there is no callback (\href{https://github.com/caolan/async/issues/966}{\texttt{ \#966}})
\item {\ttfamily auto} will no. properly stop execution when an error occurs (\href{https://github.com/caolan/async/issues/988}{\texttt{ \#988}}, \href{https://github.com/caolan/async/issues/993}{\texttt{ \#993}})
\item Various doc fixes (\href{https://github.com/caolan/async/issues/971}{\texttt{ \#971}}, \href{https://github.com/caolan/async/issues/980}{\texttt{ \#980}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3317}{}\doxysection{v1.\+5.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3317}

\begin{DoxyItemize}
\item Added {\ttfamily transform}, analogous to \href{http://lodash.com/docs\#transform}{\texttt{ {\ttfamily \+\_\+.\+transform}}} (\href{https://github.com/caolan/async/issues/892}{\texttt{ \#892}})
\item {\ttfamily map} now returns an object when an object is passed in, rather than array with non-\/numeric keys. {\ttfamily map} will begin always returning an array with numeric indexes in the next major release. (\href{https://github.com/caolan/async/issues/873}{\texttt{ \#873}})
\item {\ttfamily auto} now accepts an optional {\ttfamily concurrency} argument to limit the number o. running tasks (\href{https://github.com/caolan/async/issues/637}{\texttt{ \#637}})
\item Added {\ttfamily queue\#workers\+List()}, to retrieve the lis. of currently running tasks. (\href{https://github.com/caolan/async/issues/891}{\texttt{ \#891}})
\item Various code simplifications (\href{https://github.com/caolan/async/issues/896}{\texttt{ \#896}}, \href{https://github.com/caolan/async/issues/904}{\texttt{ \#904}})
\item Various doc fixes \+:scroll\+: (\href{https://github.com/caolan/async/issues/890}{\texttt{ \#890}}, \href{https://github.com/caolan/async/issues/894}{\texttt{ \#894}}, \href{https://github.com/caolan/async/issues/903}{\texttt{ \#903}}, \href{https://github.com/caolan/async/issues/905}{\texttt{ \#905}}, \href{https://github.com/caolan/async/issues/912}{\texttt{ \#912}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3318}{}\doxysection{v1.\+4.\+2}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3318}

\begin{DoxyItemize}
\item Ensure coverage files don\textquotesingle{}t get published on npm (\href{https://github.com/caolan/async/issues/879}{\texttt{ \#879}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3319}{}\doxysection{v1.\+4.\+1}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3319}

\begin{DoxyItemize}
\item Add in overlooked {\ttfamily detect\+Limit} method (\href{https://github.com/caolan/async/issues/866}{\texttt{ \#866}})
\item Removed unnecessary files from npm releases (\href{https://github.com/caolan/async/issues/861}{\texttt{ \#861}})
\item Removed usage of a reserved word to prevent \+:boom\+: in older environments (\href{https://github.com/caolan/async/issues/870}{\texttt{ \#870}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3320}{}\doxysection{v1.\+4.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3320}

\begin{DoxyItemize}
\item {\ttfamily asyncify} now supports promises (\href{https://github.com/caolan/async/issues/840}{\texttt{ \#840}})
\item Added {\ttfamily Limit} versions of {\ttfamily filter} and {\ttfamily reject} (\href{https://github.com/caolan/async/issues/836}{\texttt{ \#836}})
\item Add {\ttfamily Limit} versions of {\ttfamily detect}, {\ttfamily some} and {\ttfamily every} (\href{https://github.com/caolan/async/issues/828}{\texttt{ \#828}}, \href{https://github.com/caolan/async/issues/829}{\texttt{ \#829}})
\item {\ttfamily some}, {\ttfamily every} and {\ttfamily detect} now short circuit early (\href{https://github.com/caolan/async/issues/828}{\texttt{ \#828}}, \href{https://github.com/caolan/async/issues/829}{\texttt{ \#829}})
\item Improve detection of the global object (\href{https://github.com/caolan/async/issues/804}{\texttt{ \#804}}), enabling use in Web\+Workers
\item {\ttfamily whilst} now called with arguments from iterator (\href{https://github.com/caolan/async/issues/823}{\texttt{ \#823}})
\item {\ttfamily during} now gets called with arguments from iterator (\href{https://github.com/caolan/async/issues/824}{\texttt{ \#824}})
\item Code simplifications and optimizations aplenty (\href{https://github.com/caolan/async/compare/v1.3.0...v1.4.0}{\texttt{ diff}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3321}{}\doxysection{v1.\+3.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3321}
New Features\+:
\begin{DoxyItemize}
\item Added {\ttfamily constant}
\item Added {\ttfamily asyncify}/{\ttfamily wrap\+Sync} for making sync functions work with callbacks. (\href{https://github.com/caolan/async/issues/671}{\texttt{ \#671}}, \href{https://github.com/caolan/async/issues/806}{\texttt{ \#806}})
\item Added {\ttfamily during} and {\ttfamily do\+During}, which are like {\ttfamily whilst} with an async truth test. (\href{https://github.com/caolan/async/issues/800}{\texttt{ \#800}})
\item {\ttfamily retry} now accepts an {\ttfamily interval} parameter to specify a delay between retries. (\href{https://github.com/caolan/async/issues/793}{\texttt{ \#793}})
\item {\ttfamily async} should work better in Web Workers due to better {\ttfamily root} detection (\href{https://github.com/caolan/async/issues/804}{\texttt{ \#804}})
\item Callbacks are now optional in {\ttfamily whilst}, {\ttfamily do\+Whilst}, {\ttfamily until}, and {\ttfamily do\+Until} (\href{https://github.com/caolan/async/issues/642}{\texttt{ \#642}})
\item Various internal updates (\href{https://github.com/caolan/async/issues/786}{\texttt{ \#786}}, \href{https://github.com/caolan/async/issues/801}{\texttt{ \#801}}, \href{https://github.com/caolan/async/issues/802}{\texttt{ \#802}}, \href{https://github.com/caolan/async/issues/803}{\texttt{ \#803}})
\item Various doc fixes (\href{https://github.com/caolan/async/issues/790}{\texttt{ \#790}}, \href{https://github.com/caolan/async/issues/794}{\texttt{ \#794}})
\end{DoxyItemize}

Bug Fixes\+:
\begin{DoxyItemize}
\item {\ttfamily cargo} now exposes the {\ttfamily payload} size, and {\ttfamily cargo.\+payload} can be changed on the fly after the {\ttfamily cargo} is created. (\href{https://github.com/caolan/async/issues/740}{\texttt{ \#740}}, \href{https://github.com/caolan/async/issues/744}{\texttt{ \#744}}, \href{https://github.com/caolan/async/issues/783}{\texttt{ \#783}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3322}{}\doxysection{v1.\+2.\+1}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3322}
Bug Fix\+:


\begin{DoxyItemize}
\item Small regression with synchronous iterator behavior in {\ttfamily each\+Series} with a 1-\/element array. Before 1.\+1.\+0, {\ttfamily each\+Series}\textquotesingle{}s callback was called on the same tick, which this patch restores. In 2.\+0.\+0, it will be called on the next tick. (\href{https://github.com/caolan/async/issues/782}{\texttt{ \#782}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3323}{}\doxysection{v1.\+2.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3323}
New Features\+:


\begin{DoxyItemize}
\item Added {\ttfamily times\+Limit} (\href{https://github.com/caolan/async/issues/743}{\texttt{ \#743}})
\item {\ttfamily concurrency} can be changed after initialization in {\ttfamily queue} by setting {\ttfamily q.\+concurrency}. The new concurrency will be reflected the next time a task is processed. (\href{https://github.com/caolan/async/issues/747}{\texttt{ \#747}}, \href{https://github.com/caolan/async/issues/772}{\texttt{ \#772}})
\end{DoxyItemize}

Bug Fixes\+:


\begin{DoxyItemize}
\item Fixed a regression in {\ttfamily each} and family with empty arrays that have additional properties. (\href{https://github.com/caolan/async/issues/775}{\texttt{ \#775}}, \href{https://github.com/caolan/async/issues/777}{\texttt{ \#777}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3324}{}\doxysection{v1.\+1.\+1}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3324}
Bug Fix\+:


\begin{DoxyItemize}
\item Small regression with synchronous iterator behavior in {\ttfamily each\+Series} with a 1-\/element array. Before 1.\+1.\+0, {\ttfamily each\+Series}\textquotesingle{}s callback was called on the same tick, which this patch restores. In 2.\+0.\+0, it will be called on the next tick. (\href{https://github.com/caolan/async/issues/782}{\texttt{ \#782}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3325}{}\doxysection{v1.\+1.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3325}
New Features\+:


\begin{DoxyItemize}
\item {\ttfamily cargo} now supports all of the same methods and event callbacks as {\ttfamily queue}.
\item Added {\ttfamily ensure\+Async} -\/ A wrapper that ensures an async function calls its callback on a later tick. (\href{https://github.com/caolan/async/issues/769}{\texttt{ \#769}})
\item Optimized {\ttfamily map}, {\ttfamily each\+Of}, and {\ttfamily waterfall} families of functions
\item Passing a {\ttfamily null} or {\ttfamily undefined} array to {\ttfamily map}, {\ttfamily each}, {\ttfamily parallel} and families will be treated as an empty array (\href{https://github.com/caolan/async/issues/667}{\texttt{ \#667}}).
\item The callback is now optional for the composed results of {\ttfamily compose} and {\ttfamily seq}. (\href{https://github.com/caolan/async/issues/618}{\texttt{ \#618}})
\item Reduced file size by 4kb, (minified version by 1kb)
\item Added code coverage through {\ttfamily nyc} and {\ttfamily coveralls} (\href{https://github.com/caolan/async/issues/768}{\texttt{ \#768}})
\end{DoxyItemize}

Bug Fixes\+:


\begin{DoxyItemize}
\item {\ttfamily forever} will no longer stack overflow with a synchronous iterator (\href{https://github.com/caolan/async/issues/622}{\texttt{ \#622}})
\item {\ttfamily each\+Limit} and other limit functions will stop iterating once an error occurs (\href{https://github.com/caolan/async/issues/754}{\texttt{ \#754}})
\item Always pass {\ttfamily null} in callbacks when there is no error (\href{https://github.com/caolan/async/issues/439}{\texttt{ \#439}})
\item Ensure proper conditions when calling {\ttfamily drain()} after pushing an empty data set to a queue (\href{https://github.com/caolan/async/issues/668}{\texttt{ \#668}})
\item {\ttfamily each} and family will properly handle an empty array (\href{https://github.com/caolan/async/issues/578}{\texttt{ \#578}})
\item {\ttfamily each\+Series} and family will finish if the underlying array is modified during execution (\href{https://github.com/caolan/async/issues/557}{\texttt{ \#557}})
\item {\ttfamily queue} will throw if a non-\/function is passed to {\ttfamily q.\+push()} (\href{https://github.com/caolan/async/issues/593}{\texttt{ \#593}})
\item Doc fixes (\href{https://github.com/caolan/async/issues/629}{\texttt{ \#629}}, \href{https://github.com/caolan/async/issues/766}{\texttt{ \#766}})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3326}{}\doxysection{v1.\+0.\+0}\label{md_sfcode_node_modules_async_CHANGELOG_autotoc_md3326}
No known breaking changes, we are simply complying with semver from here on out.

Changes\+:


\begin{DoxyItemize}
\item Start using a changelog!
\item Add {\ttfamily for\+Each\+Of} for iterating over Objects (or to iterate Arrays with indexes available) (\href{https://github.com/caolan/async/issues/168}{\texttt{ \#168}} \href{https://github.com/caolan/async/issues/704}{\texttt{ \#704}} \href{https://github.com/caolan/async/issues/321}{\texttt{ \#321}})
\item Detect deadlocks in {\ttfamily auto} (\href{https://github.com/caolan/async/issues/663}{\texttt{ \#663}})
\item Better support for require.\+js (\href{https://github.com/caolan/async/issues/527}{\texttt{ \#527}})
\item Throw if queue created with concurrency {\ttfamily 0} (\href{https://github.com/caolan/async/issues/714}{\texttt{ \#714}})
\item Fix unneeded iteration in {\ttfamily queue.\+resume()} (\href{https://github.com/caolan/async/issues/758}{\texttt{ \#758}})
\item Guard against timer mocking overriding {\ttfamily set\+Immediate} (\href{https://github.com/caolan/async/issues/609}{\texttt{ \#609}} \href{https://github.com/caolan/async/issues/611}{\texttt{ \#611}})
\item Miscellaneous doc fixes (\href{https://github.com/caolan/async/issues/542}{\texttt{ \#542}} \href{https://github.com/caolan/async/issues/596}{\texttt{ \#596}} \href{https://github.com/caolan/async/issues/615}{\texttt{ \#615}} \href{https://github.com/caolan/async/issues/628}{\texttt{ \#628}} \href{https://github.com/caolan/async/issues/631}{\texttt{ \#631}} \href{https://github.com/caolan/async/issues/690}{\texttt{ \#690}} \href{https://github.com/caolan/async/issues/729}{\texttt{ \#729}})
\item Use single noop function internally (\href{https://github.com/caolan/async/issues/546}{\texttt{ \#546}})
\item Optimize internal {\ttfamily \+\_\+each}, {\ttfamily \+\_\+map} and {\ttfamily \+\_\+keys} functions. 
\end{DoxyItemize}