Created
January 13, 2015 23:38
-
-
Save seyDoggy/de3f159b9605743855a6 to your computer and use it in GitHub Desktop.
Anyone see any promise anti patterns?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// assumed returned method of tokenService, a factory in my angular app. | |
function validate() { | |
var expires = new Date(sessionStore.get(XPERATION)), | |
now = new Date(), | |
deferred = $q.defer(); | |
try { | |
if (sessionStore.get(XPERATION)) { | |
if (Object.prototype.toString.call(expires) === '[object Date]' && !isNaN(expires.getTime())) { | |
if (+expires >= +now) { | |
$http.defaults.headers.common['api-token'] = $http.defaults.headers.common['api-token'] || sessionStore.get('token'); | |
deferred.resolve(true); | |
} else { | |
throw new Error('The token has expired'); | |
} | |
} else { | |
throw new Error('"expires" is not a date object or is not a valid date ' + expires); | |
} | |
} else { | |
throw new Error('sessionStore.get(\'expires\') returns ' + sessionStore.get(XPERATION)); | |
} | |
} catch (e) { | |
getToken() | |
.then(setToken) | |
.then(function () { | |
deferred.resolve(true); | |
}) | |
.catch(function () { | |
$log.warn('[tokenService.validate]: Could not validate token --- ' + e.name + ' ' + e.message); | |
$log.info('[tokenService.validate]: Creating a new token now.'); | |
if (numberOfRequests > 10) { | |
deferred.reject(); | |
return; | |
} | |
validateToken() | |
.then(function () { | |
deferred.resolve(true); | |
}) | |
.catch(function () { | |
deferred.reject(new Error('[tokenService.validate]: ' + e.name + ' ' + e.message + '. Unable to get new token, number of requests exceeded -- ' + numberOfRequests + ' total request made.')); | |
}); | |
}); | |
} | |
return deferred.promise; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment