JSFiddle - React, Tailwind, and code Playground

HTML

<div id='numbers'></div>

JavaScript

let arr = [1, 2, 3, 4, 5];
let $numbers = document.getElementById('numbers');


// Denna metod är i sitt egna namespace och körs direkt efter den initieras, notera (arr).

(function nextNumber(numbers) {
	// Kontrollerar om vi fortfarande har värden i arrayen som behöver bearbetas
	if (numbers.length > 0) {
  		// Tar bort första värdet och returnerar det till nr
    	let nr = numbers.shift();
      // Vänta 500 ms, här simulerar jag din async metod som kan ta 2-5 sekunder eller hur länge den nu tar.
      setTimeout(() => {
      		// Bara för att printa ut det åt dig; hade jag använt en alert så hade den lika gärna kunnat bromsa en forEach även om koden inte hade fungerat för din custom-metod då.
      		let $div = document.createElement('div');
          $div.append(nr);
					$numbers.append($div);
          // Nu är vi klara med detta numret och går vidare
      		nextNumber(numbers);
      }, 500);
  } else {
  	// Nu har vi kört igenom alla nummer
    $numbers.append('Done');
  }
}(arr));