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…
Reference in new issue