Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save esfand/75ffd5ce3bba35aaaddc18e5f1fb91d6 to your computer and use it in GitHub Desktop.
Save esfand/75ffd5ce3bba35aaaddc18e5f1fb91d6 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 resolved within a specified 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