JSFiddle - React, Tailwind, and code Playground

by willseitz

JavaScript

function wait(duration) {
    return new Promise((resolve, reject) => {
        setTimeout(resolve, duration)
    })
}

function fakeSubmit(someId) {
	  return new Promise((resolve, reject) => {
        console.log("Requesting "+someId);
        var randomValue = Math.floor(Math.random() * 10) + 1
        if (randomValue > 8) {
        	console.log("SUCCESS");
        	resolve("SUCCESS");
        } else {
        console.log("FAILURE");
          reject("FAILURE");
        }
    })
}
var retryOnFailure = (functionToRetry, timesToRetry, delay) => {
	var retryCount = timesToRetry;
  var failureReason;
  var functionToIterate = function(...args) {
		if (retryCount < 1) { 
    	return Promise.reject(failureReason);
    } else {
      retryCount--;
		  return functionToRetry(...args)
      	.catch((err) => {
        	failureReason = err;
        	return wait(delay)
          	.then(() => { return functionToIterate(...args)});
        })
    }
  }
	return functionToIterate;
}


var getUserInfoFromApi = () => {}

var submit = retryOnFailure(fakeSubmit, 5, 1000);

submit(9)
  .then((s) => {
  	console.log("FINAL SUCCESS => "+s)
  })
  .catch((f) => {
  	console.log("FINAL FAILURE => "+f)
  })

//wait(1000).then(() => {console.log("hey")}).then(() => {return wait(1000)}).then(() => {console.log("there")})
/*
fakeSubmit(3)
.then(() => {
	return fakeSubmit(4);
})
.then(() => {
  return wait(2000);
})
.then(() => {
  return fakeSubmit(5);
})
.catch((err) => {
	console.log("Error happened in chain: "+err)
})*/