JSFiddle - React, Tailwind, and code Playground
by evgkch
JavaScript
function deferred(){
this.status = 'pending';
this.result = void null;
}
deferred.prototype.resolve = function(result){
this.status = 'resovled';
this.result = result;
if (typeof(this._handler) == 'function')
this._handler();
return this;
}
deferred.prototype.then = function(callback){
const newDeferred = new deferred();
this._handler = ()=>{
const cbResult = callback(this.result);
if (cbResult instanceof deferred)
cbResult.then(res=>newDeferred.resolve(res));
else
newDeferred.resolve(cbResult);
}
return newDeferred;
}
var d = new deferred();
d.then(function(res){
console.log("1 ", res);
var d1 = new deferred();
setTimeout(function(){ d1.resolve("a"); }, 1500);
return d1;
})
.then(function(res){ console.log("2 ", res); return "b"; })
.then(function(res){ console.log("3 ", res); return "c"; });
d.resolve("hello");