Promise Polyfill Javascript

Promise Polyfill Javascript

?

function PromisePolyFill(executor) {
	let onResolve,
		onReject,
		isFulfilled = false,
		isRejected = false,
		isCalled = false,
		value;
	
	function resolve(val) {
		isFulfilled = true;
		value = val;	
		
		if (typeof onResolve === "function") {
			onResolve(value);
			isCalled = true;
		} 
	}
	
	function reject(val) {
		isRejected = true;
		value = val;
	
		if (typeof onReject === "function") {
			onReject(value);
			isCalled = true;
		}
	}
	
	this.then = function (callback) {
		onResolve = callback;		
		
		if (isFulfilled && !isCalled) {
			called = true;
			onResolve(value);
		}
		
		return this;
	};
	
	this.catch = function (callback) {
		onReject = callback;
		
		if (isRejected && !isCalled) {
			called = true;
			onResolve(value);
		}
		
		return this;
	}

	try {
		executor(resolve, reject);
	} catch (err) {
		reject(err);
	}
	
}



// Testing the polyfill
const examplePromise = new PromisePolyFill((resolve, reject) => {
	setTimeout(() => {
		resolve(2);
	}, 1000)	
});

examplePromise
	.then((res)=> {
		console.log(res);	
	})
	.catch((err) => {
		console.error(err);
	})