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");