JSFiddle - React, Tailwind, and code Playground

JavaScript

function doAsync(i) {
  console.log("doAsync " + i);
  return Promise.resolve();
}

function ayncFunc() {
  return doAsync(-1).catch(doAsync(0)).catch(doAsync(1)).catch(doAsync(2));
};

var retries = 3;

function ayncFunc2() {
  var p = doAsync(-1);

  for (var i=0; i < retries; i++) {
    p = p.catch(doAsync(i));
  }
  return p;
};

function ayncFunc3() {
  function recurse(i) {
    return doAsync(i).catch(function(e) {
      if (i < retries) {
        return recurse(++i);
      }
      throw e;
    });
  }
  return recurse(0);
};


 ayncFunc().catch(function(e) { console.log(e); })
.then(ayncFunc2).catch(function(e) { console.log(e); })
.then(ayncFunc3).catch(function(e) { console.log(e); });