Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save guillefd/7806a359d53c58c3267f32ffe4a5e5d6 to your computer and use it in GitHub Desktop.
Save guillefd/7806a359d53c58c3267f32ffe4a5e5d6 to your computer and use it in GitHub Desktop.
Adds a timeout to a JavaScript promise, rejects if not resolved within timeout period
/**
* wraps a promise in a timeout, allowing the promise to reject if not resolve with a specific period of time
* @param {integer} ms - milliseconds to wait before rejecting promise if not resolved
* @param {Promise} promise to monitor
* @Example
* promiseTimeout(1000, fetch('https://courseof.life/johndoherty.json'))
* .then(function(cvData){
* alert(cvData);
* })
* .catch(function(){
* alert('request either failed or timedout');
* });
*/
function promiseTimeout(ms, promise){
return new Promise(function(resolve, reject){
// create a timeout to reject promise if not resolved
var timer = setTimeout(function(){
reject(new Error("promise timeout"));
}, ms);
promise
.then(function(res){
clearTimeout(timer);
resolve(res);
})
.catch(function(err){
clearTimeout(timer);
reject(err);
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment