JSFiddle - React, Tailwind, and code Playground

JavaScript

Function.prototype.pbind = function(/* ...args */) {
  var args = Array.prototype.slice.call(arguments);
  args.unshift(window);
  return this.bind.apply(this, args);
};


function Switch(condition) {
  var done = false,
      skip = true;

  var promise = Promise.resolve(condition);

  var pseudo = {
    'case': function(value) {
      if (done || !skip)
        return pseudo;

      if (condition === value) {
        skip = false;
      }

      return pseudo;
    },

    then: function(res) {
      if (!skip)
        promise.then(res);

      return pseudo;
    },

    'break': function(fromDefault) {
      if (!skip) {
        done = true;
        if (!fromDefault)
          skip = true;
      }

      return pseudo;
    },

    'default': function() {
      if (done)
        return pseudo;

      var ok = false;
      promise.then(function() { ok = true; });

      if (!ok)
        promise.catch(function(v) { return v; });

      return pseudo.case(condition).break(true); // хак уровня /b/
    }
  };

  return pseudo;
};

Switch(+prompt('2+2?', ''))
  .case(0)
  .case(1)
  .case(2)
  .case(3)
    .then(function(n) { alert(n+'???'); })
    .then(alert.pbind('Мало!!!'))
  .break()
  .case(4)
    .then(alert.pbind('В точку!'))
  .break()
  .case(5)
  .case(6)
  .case(7)
    .then(alert.pbind('Перебор'))
  .break()
  .default()
    .then(alert.pbind('Я таких значений не знаю'))
;