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('Я таких значений не знаю'))
;