JSFiddle - React, Tailwind, and code Playground
by Castrolol
JavaScript
(function (w) {
var Promise = function (func) {
var result;
var error;
var undef;
var promise = this;
var isAsync = false;
var funcs = [];
var step = 0;
var lastError = -2;
function then(func) {
try {
if (isAsync) {
funcs.push({
isAsync: false,
exec: func,
type: "then"
});
} else {
step++;
result = func(error, result);
error = undef;
}
} catch (e) {
lastError = step;
error = e;
result = undef;
}
return promise;
}
function fail(func) {
if (isAsync) {
funcs.push({
isAsync: false,
exec: func,
type: "fail"
});
} else {
if (lastError === step) {
step++;
func(error);
}
}
return promise;
}
function done(func) {
if (isAsync) {
funcs.push({
isAsync: false,
exec: func,
type: "done"
});
} else {
if (lastError !== step && lastError + 1 !== step) {
step++;
func(result);
}
}
return promise;
}
function wait(asyncFunc) {
if (isAsync) {
funcs.push({
isAsync: true,
exec: asyncFunc
});
} else {
step++;
isAsync = true;
asyncFunc(error, result, function (err, returnValue) {
...