understanding promises

HTML

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

JavaScript

let i = 1;
let stopAt = 10;

function promise1(val) {
 print('1');
  return new Promise((resolve, reject) => 
  reject("1st call succeed"));
}

function promise2(val) {
 print('2');
  return Promise.reject("2nd call rejected");
}

function promise3(val) {
 print('3');
  return Promise.resolve("3rd last call succeed");
}

function promiseArray() {
  const promisesToTry = [
    promise1,
    promise2,
    promise3,
    promise2,
    promise2,
    promise1,
    promise3
  ];

  return promisesToTry.reduce((resolution, checkStreamAgain) => {
   print(resolution);
   return resolution
   .then(() => {
   print('about to resolve');
   return Promise.resolve()
   })
   .catch(() => {
   print('about to try another promise');
   return checkStreamAgain();
   });
  },
   Promise.reject());
}

/*function loop(val) {
	return promise1(val)
  	.then(() => promise2(), () => promise3());
}*/

promiseArray(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. :( error' + error);
});

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