JSFiddle - React, Tailwind, and code Playground

by moob

JavaScript

var results = [
{legs:[
    {a:"a",b:"b",c:"c"},
    {a:"d",b:"e",c:"f"},
    {a:"g",b:"h",c:"i"}
    ]
},
{legs:[
    {a:"j",b:"k",c:"l"},
    {a:"m",b:"n",c:"o"},
    {a:"p",b:"q",c:"r"}
    ]
},
{legs:[
    {a:"s",b:"t",c:"u"},
    {a:"v",b:"w",c:"x"},
    {a:"y",b:"z",c:"-"}
    ]
}
];


(function attachTransitStepper(){
    /* attaches stepGetTransit function to each result object (we'll call it later) */
    for (var r in results) {
        if (results.hasOwnProperty(r)) {
            var result = results[r];
            result.stepGetTransit = function(){
                //when called, this function loops through the legs of this journey getting transit data from each
                var zis = this,
                    legs = zis.legs,
                    iteration = zis.iteration || 0;
                console.log("zis",zis);
                console.log("iteration",iteration);
                console.log("legs",legs);
                if(legs && iteration < legs.length){
                    var leg = legs[iteration];
                    setTimeout(function(){base.getTransit(leg, function(){zis.stepGetTransit();});},100);//slowed down OVER_QUERY_LIMIT
                }
                iteration++;
                zis.iteration = iteration;
            };
        }
    }
})();

var step = 0,
    len = results.length;

(function triggerEachTransitStepperInTurn(){
    if (results && step < len) {
        var result = results[step];
        console.log("step",step);
        setTimeout(function(){result.stepGetTransit(); step++; triggerEachTransitStepperInTurn();},(step*10));//slowed down OVER_QUERY_LIMIT
    }
})();


var base = {};
base.getTransit = function(leg, callback) {
            console.log("get transit",leg);
			if(typeof(callback) == "function"){
				console.log("callback");
				callback();
			}
		};