recursive fn with promises (es6)

by María Fernández

HTML

<div>
<ul id="console">Console:</ul>
</div>

JavaScript

let i = 1;
let stopAt = 10;

function promise(val) {
  return new Promise(function(res,rej) {
  	debugger;
 		if(typeof val === 'number' && val <= stopAt) {
      	rej('I\'m the promise, and I failed, iteration: ' + val);
     }
     else {
     	res(val);
     }
  });
  
}

function loop(val) {
	return promise(val).then(null, function(err){
  	return new Promise(function(res) {
    	setTimeout(function() {
      	debugger;
        i++;
        print('I\'m the rejection handler and I\'ll call myself again. The promise error I got is: "' + err + '"');
        res(loop(i));
    	}, 1000);
    });
  });
}

/*
* Main call to the loop-promise fn that inside calls a promise, if the promise fails, the loop fn 
* calls itself again
*/
loop(i).then(function(result) {
	debugger;
 print('No more errors, I\'m the caller! promise returned: ' + result);
})
.catch(function(error) {
	debugger;
  print('Got an error! But I should have never be called. :(');
});

function print(message) {
console.log(message);
var ul = document.getElementById('console');
  var li = document.createElement('li');
  li.appendChild(document.createTextNode(message));
  ul.appendChild(li);
}