function promiseTimeout(msec) { | |
return promise => { | |
const timeout = new Promise((yea, nah) => setTimeout(() => nah(new Error('Timeout expired')), msec)) | |
return Promise.race([promise, timeout]) | |
} | |
} | |
promiseTimeout(5000)(fetch('https://api.github.com/orgs/nodejs')) | |
.then(response => response.json()) | |
.then(data => { | |
console.log(data) // Prints result from `response.json()` in getRequest | |
}) | |
.catch(error => console.error(error)) // Catches any timeout (or other failure) | |
//////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////// | |
// Alternative example: | |
fetchTimeout(5000, 'https://api.github.com/orgs/nodejs') | |
.then(console.log) | |
// Alternative implementation: | |
function fetchTimeout(msec, ...args) { | |
return raceTimeout(fetch(...args)) | |
function raceTimeout(promise) { | |
const timeout = new Promise((yea, nah) => setTimeout(() => nah(new Error('Timeout expired')), msec)) | |
return Promise.race([promise, timeout]) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment