JSFiddle - React, Tailwind, and code Playground

JavaScript

var myTestTimeout = function(i, deferred) {
  if (!deferred) {
    deferred = $.Deferred();
  }

  if (i < 3) {
    i++;
    console.log("Recursion (" + i + ")!");

    setTimeout(function() {
      return myTestTimeout(i, deferred);
    }, 500);
  } else if (i === 3) {
    console.log("Resolving!");
    return deferred.resolve("Woohoo, reached " + i + "!");
  }
}

myTestTimeout(0).done(function(result) {
  console.log(result);
});