feat: Added some JS polyfills

pull/767/head
Abhishek765 3 years ago
parent b07e06e1a4
commit ac36e2f8b8

@ -0,0 +1,67 @@
function myPromise(executer) {
let onResolve,
onReject,
isFullFilled = false,
isCalled = false,
value;
this.then = function (callback) {
onResolve = callback;
if (isFullFilled && !isCalled) {
isCalled = true;
onResolve(value);
}
return this;
};
this.catch = function (callback) {
onReject = callback;
if (isFullFilled && !isCalled) {
isCalled = true;
onReject(value);
}
return this;
};
function resolve(val) {
isFullFilled = true;
value = val;
if (typeof onResolve === "function") {
isCalled = true;
onResolve(val);
}
}
function reject(val) {
isFullFilled = true;
value = val;
if (typeof onReject === "function") {
isCalled = true;
onReject(val);
}
}
// Error handling for executer
try {
executer(resolve, reject);
} catch (error) {
reject(error);
}
}
const examplePromise = new myPromise((resolve, reject) => {
let state = false;
setTimeout(() => {
if (state) resolve("Promise resolved");
else reject("Promise rejected");
}, 1000);
});
examplePromise
.then((res) => {
console.log(res);
})
.catch((err) => {
throw new Error(err);
});

@ -0,0 +1,58 @@
// Resolved promise
function promise1(val) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(val);
}, 1000);
});
}
// Rejected promise
function promise2(val) {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(val);
}, 1000);
});
}
// Resolved promise
function promise3(val) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(val);
}, 1000);
});
}
Promise.myAllPromise = (promises) => {
return new Promise((resolve, reject) => {
let results = [];
if (promises.length === 0) {
resolve(results);
return;
}
let promisePendingState = promises.length;
promises.forEach((promise, index) => {
Promise.resolve(promise).then((res) => {
results[index] = res;
promisePendingState--;
if (promisePendingState === 0) {
resolve(results);
}
}, reject);
});
});
};
Promise.myAllPromise([
promise1("hello from promise 1"),
promise2("hello from promise 2"),
promise3("hello from promise 3"),
])
.then((res) => console.log(res))
.catch((err) => console.error(`failed Promise: ${err}`));

@ -0,0 +1,19 @@
const numbers = [1, 2, 3, 4, 5];
// structure -> Array.filter((ele, index, arr) => {})
Array.prototype.myFilter = function (callback) {
let newArr = [];
for (let i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
newArr.push(this[i]);
}
}
return newArr;
};
// const filteredNumbers = numbers.filter((num) => num > 2);
const filteredNumbers = numbers.myFilter((num) => num > 2);
console.log({ filteredNumbers });

@ -0,0 +1,17 @@
const numbers = [1, 2, 3, 4, 5];
// structure -> Array.map((ele, index, arr) => {})
Array.prototype.myMap = function (callback) {
let newArr = [];
for (let i = 0; i < this.length; i++) {
newArr.push(callback(this[i], i, this));
}
return newArr;
};
// const modifiedNumbers = numbers.map((num) => num * 2);
const modifiedNumbers = numbers.myMap((num) => num * 2);
console.log({ modifiedNumbers });

@ -0,0 +1,18 @@
const numbers = [1, 2, 3, 4, 5];
// structure -> Array.reduce((acc, curr, index, arr) => {}, initialValue)
Array.prototype.myReduce = function (callback, initialValue) {
let accumulator = initialValue;
// after assigning initialValue to accumulator we need to check whether accumulator exists or not
for (let i = 0; i < this.length; i++) {
accumulator = accumulator ? accumulator + this[i] : this[i];
}
return accumulator;
};
// const sum = numbers.reduce((acc, curr) => acc + curr, 0);
const sum = numbers.myReduce((acc, curr) => acc + curr, 0);
console.log({ sum });
Loading…
Cancel
Save