The concept of 'done-ness' is not something that is often considered when writing functions in JavaScript — you end up just running out of data or a function stops getting called.
There are many async scenarios that make sense to signal that work is completed.
By following a completion pattern, we can easily trigger repetition and sequencing (async or not) into our code.
You're in Section 05 of Composing Closures and Callbacks in JavaScript