title: How do you deal with asynchronous return from $http.post in angularJS?
body: <p>Stuck with a simple basic login problem here. My AuthService factory has following code inside of it (2 relevant functions and a local variable):</p>
  
  <pre><code>  var username = '';
  
   function login(uname, upwd, utype) {
  
  // create a new instance of deferred
  var deferred = $q.defer();
  
  
  $http({
          method: 'POST',
          url: '/root',
          headers: {
              'Content-Type': 'application/json'
          },
          data: {
              username: uname,
              password: upwd,
              type: utype
          }
  
      }).success(function(data, status, headers, config) {
          if (status === 200) {
              user = true;
              username = data.username;
              usertype = data.usertype;
              deferred.resolve();
          } else {
              user = false;
              deferred.reject();
          }
  
      })
      .error(function(data, status, headers, config) {
          user = false;
          deferred.reject();
      });
  
    // return promise object
    return deferred.promise;
  
  }
  
  function getusername() {
  
        return username;
      }
  </code></pre>
  
  <p>My controller looks like this:</p>
  
  <pre><code>angular.module('smApp').controller('rootloginController', ['$scope', '$location', 'notificationFactory', 'AuthService',
  function($scope, $location, notificationFactory, AuthService) {
  
      $scope.submit = function() {
          AuthService.login($scope.rEmail, $scope.rootPassword, 'root')
          if (AuthService.isLoggedIn()) {
              $location.url('/dashboard');
              notificationFactory.success('Logged in as ' + rootEmail);
          } else {
              //ngNotifier.notifyError($scope.rEmail);
  
              notificationFactory.error('Invalid username &amp; password combination');
          }
      };
      };
      }]);
  </code></pre>
  
  <p>I am calling my getusername() in the if statementright after login() and since login has $http post it's asynchronous and I think im hitting a wall here. </p>
  
  <p>So my main problem here is the first click always gives me error message and the second clicks logs me in. I am assuming this has to do with the promise not being fulfilled right away and taking some time to execute. I was wondering if there was anyway around this? I really dont have any other code to execute beside wait since this is a login page and using a timeout doesnt seem like the proper way to do it.</p>