非同期処理を含むイベントが連続で発火されて、それを、同期に実行したい(発火された順番で必ず前の処理が終わってから実行したい)時に使えるテクニック。めちゃめちゃに実行される非同期処理を一列に整列させるイメージです。
var promises = [];
promises.push(Promise.resolve());
promises.push(
promises.shift().then(() => {
return new Promise(resolve => {
setTimeout(() => {