Using Angularjs here:
I have a form where user fills up some data and clicks save button to save data :
  $scope.save = function (isValid) {
        if (isValid) {
            if (!$scope.checkBoxChecked) {
                $scope.getExistingName($scope.uName);
            }              
            var name = $scope.uName != '' ? $scope.uName? : 'testuser';                
           //Call save api                    
        }
        else {
            return false;
        }
    };
In the save method I am checking for uname, which gets it value by calling another api as below:
    $scope.getExistingName = function (uName) {
         myService.getDataFromApi(uName).then(function (data) {
         var existingSetName = '';
         if(data.length >0)
          {
             $scope.uName = data[i].uName;
          }               
        });
    }
The issue is $scope.uName in my Save button is always ''. I tried to debug and found out that the result from the $scope.getExistingName method being is promise is deffered and returned after the orignal call. Because of which my $scope.uName is empty.
What am I missing here?
--Updated---
Save method:
var name = $scope.getExistingName($scope.uName);
Updated getExistingName
   $scope.getExistingName = function (uName) {
     return myService.getDataFromApi(uName).then(function (data) {
     var existingSetName = '';
     if(data.length >0)
      {
         return data[i].uName;
      }               
    });
}
--This works--
   if (!$scope.checkBoxChecked) {
           $scope.getExistingName($scope.uName).then(function(data)
           {
             var name = $scope.uName != '' ? $scope.uName? : 'testuser';
             //Call save api 
           });
        }    
   else
   {
       var name = $scope.uName != '' ? $scope.uName? : 'testuser';
       //Call save api 
   }
