SDE2 Polyfill
Promise.race() Polyfill
Problem Description & Specifications
Promise.race() - it is a method that returns a promise that fulfills or rejects as soon as one of the promises is an iterable fulfills or rejects, with the value or reason from that promise.
Implementation & Test Harness
Editable Monaco RunnerJavaScript Lab Sandbox
/*
Promise.race()
- it is a method that returns a promise that fulfills or rejects as soon as one of the promises is an iterable fulfills or rejects, with the value or reason from that promise.
*/
// Normal Working of Promise.race()
function createResolvePromise(time, promiseNumber) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`Promise ${promiseNumber} Resolved.`);
}, time);
})
};
function createRejectPromise(time, promiseNumber) {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(`Promise ${promiseNumber} Rejected.`);
}, time);
})
};
const promiseArray = [createResolvePromise(100, 1), createRejectPromise(200, 2)];
try {
const res = await Promise.race(promiseArray);
console.log("Response 1: ", res);
} catch (error) {
console.error("Error 1: ", error);
}
// Promise.race() Polyfill using .then().catch()
function promiseRacePolyfillUsingThenCatch(promiseArray) {
return new Promise((resolve, reject) => {
promiseArray.forEach((promise) => {
promise
.then((result) => resolve(result))
.catch((error) => reject(error))
});
});
};
promiseRacePolyfillUsingThenCatch(promiseArray)
.then((result) => {
console.log("Response 2:", result);
})
.catch((error) => {
console.error("Error 2:", error);
})
// Promise.race() Polyfill using async/await
function promiseRacePolyfillUsingAsyncAwait(promiseArray) {
return new Promise((resolve, reject) => {
promiseArray.forEach(async (promise) => {
try {
const result = await promise;
resolve(result);
} catch (error) {
reject(error);
}
});
});
};
try {
const res = await promiseRacePolyfillUsingAsyncAwait(promiseArray);
console.log("Response 3: ", res);
} catch (error) {
console.error("Error 3: ", error);
}
Console Output
Click "Run Code" above to execute and view output...