JSFiddle - React, Tailwind, and code Playground

JavaScript

var async3 = function (cb) {
	setTimeout(function () {
        console.log('async3');
        cb();
    }, 3000);
}

var async2 = function (cb) {
	setTimeout(function () {
        console.log('async2');
        cb();
    }, 2000);
}

var async1 = function (cb) {
	setTimeout(function () {
        console.log('async1');
        cb();
    }, 1000);
}


var syncCalls = function (funcArr) {
    var prevCB;
    for (var i = funcArr.length-1; i >= 0; i--) {
        (function (index) {
            var cb = prevCB;
            prevCB = function () { 
                if (!cb) {
                    cb = function () {};
                }
                funcArr[index](cb);            
            }
        })(i);
    }
	prevCB();
}

syncCalls([async3, async2, async1]);