基本的にJavaScriptは関数を上から順番に処理していきます。これを同期処理といいます。しかし、処理が長く続く場合、ユーザーが何らかのアクションを起こしても無反応という状態が発生し、ユーザーにとっては止まっている(不具合や無反応)と認識されます。これを防ぐのが非同期プログラミングです。
非同期プログラミングは、長く続く可能性のあるタスクを開始しても、そのタスクが完了するまで待つのではなく、そのタスクの実行中も他のイベントに応答できるようにする技術です。これがあるため、WEBサイトが表示されたとき、すぐにユーザーアクションをブラウザで処理することが可能になります。
しかし、これの弊害としてDOMが構築されていないのに(データがまだ処理途中)、そのDOMへのイベント処理が始まってしまい、結果的に何もイベント処理が付加されていないDOMだけが表示されてしまうことがあります。
これを防ぐために非同期関数を任意の順番で同期処理するための関数が実装されました。
非同期 JavaScript 入門 | MDN:https://developer.mozilla.org/ja/docs/Learn/JavaScript/Asynchronous/Introducing