Looping promises

One way to loop on promises that's safe from the JS closure trap.

by jib1

HTML

<div id="div"></div>

JavaScript

var console = { log: function(msg) { div.innerHTML += "<p>" + msg + "</p>"; } };

[0,1,2,3,4,5,6,7].reduce(function(p, i) {
  return p.then(function() {
    return new Promise(function(r) { return setTimeout(r, 300) });
  })
  .then(function() { console.log(i); });
}, Promise.resolve())
.then(function() { console.log('fin'); })
.catch(function(e) { console.log(e.message); });