JSFiddle - React, Tailwind, and code Playground

by amatiasq

HTML

<script src="http://blog.amatiasq.com/fiddle-console.js"></script>

JavaScript

function raceCondition(fn) {
  var counter = 0;

  return function() {
    var index = ++counter;
    var prom = fn.apply(this, arguments);

    return new Promise(function(resolve, reject) {
      prom.then(function(value) {
        if (isLast()) resolve(value);
      }, function(error) {
        if (isLast()) reject(error);
      })
    });

    function isLast() {
      return index === counter;
    }
  };
}

function timeout(ms) {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, ms);
  });
}

var rcTimeout = raceCondition(timeout);

rcTimeout(1000).then(function() { console.log(1) });
rcTimeout(500) .then(function() { console.log(2) });
rcTimeout(100) .then(function() { console.log(3) });
rcTimeout(50)  .then(function() { console.log(4) });
rcTimeout(100) .then(function() { console.log(5) });

// Only output: 5