Loop with promise
by Jernej Slejko
HTML
<script src="https://code.jquery.com/jquery-1.10.0.min.js"></script>
<pre id="output"></pre>
JavaScript
// http://stackoverflow.com/a/21524239/1768303
(function () {
"use strict";
var output = document.getElementById("output");
var outputText = document.createTextNode("");
output.appendChild(outputText);
var _closest = ["x1", "x2", "x3"];
var _routes = [];
function printOutput(line) {
outputText.data += line + "\n";
}
function loopThroughClosest()
{
var deferred = $.Deferred();
var i = 0;
var nextStep = function() {
if (i < _closest.length) {
var promise = Route(_closest[i]);
promise.then(function(result) {
printOutput("Result loop for "+ _closest[i] +": " + result);
i++;
setTimeout(nextStep, 500);
});
}
else {
deferred.resolve("done");
}
}
nextStep();
return deferred.promise();
}
function Route(dataIn)
{
var deferred = $.Deferred();
var i = 0;
var nextStep = function() {
if (i<1) {
var tir = Math.floor(Math.random() * 600) + 100;
var inO = {data: "Step "+ dataIn + ": " + i, timer: tir};
console.log(inO);
_routes.push(inO);
i++;
setTimeout(nextStep, tir);
}
else {
deferred.resolve("done");
}
}
nextStep();
return deferred.promise();
}
function addToFoundList()
{
var promise = loopThroughClosest();
promise.then(function(result) {
printOutput("FINAL:");
console.log(_routes);
$.each(_routes, function(k, v){
printOutput(k + v.data);
});
});
}
addToFoundList();
})();