Skip to content

Instantly share code, notes, and snippets.

@seyDoggy
Created January 13, 2015 23:38
Show Gist options
  • Save seyDoggy/de3f159b9605743855a6 to your computer and use it in GitHub Desktop.
Save seyDoggy/de3f159b9605743855a6 to your computer and use it in GitHub Desktop.
Anyone see any promise anti patterns?
// 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