Q11: Implement Promise Timeout (Cancel Race)
Wrap a target Promise with a timeout reject mechanism using Promise.race, ensuring the operation fails if it exceeds a specified delay threshold.
Promise Timeout Wrapper
function promiseWithTimeout(promise, ms) {
const timeout = new Promise((_, reject) => {
setTimeout(() => reject(new Error(`Operation timed out after ${ms}ms`)), ms);
});
return Promise.race([promise, timeout]);
}
const slowTask = new Promise(res => setTimeout(() => res('Done'), 2000));
promiseWithTimeout(slowTask, 1000).catch(err => console.error(err.message));💡 Promise.race resolves with the target result if it completes before the setTimeout reject fires.
Key Takeaways
- Promise.race resolves or rejects as soon as any promise in the array settles.
- Combines target promise against a timer reject promise.
Knowledge Check
If the main promise resolves in 500ms and the timeout is set to 1000ms, what is the output of Promise.race?