when a function, once it returns true, the
then function will be resolved.
when can be chained and will run synchronously.
doUntil a function that takes a parameter
next, an async function can then be executed, calling next in it's own callback. If
next is passed true, it will run again. Passing false will resolve the