Posting my comment as an answer as requested since it solved the problem.
All of the calls on a $resource or via the $http service object are done asynchronously since they are network calls and it's indeterminate how long it will take to get a response (if it were synchronous no other code would execute while the request was being made which is undesirable).
The fix is to just move the code that is expecting to use the data for initialization into the callback for the async function call. The callback is called as soon as response from the server is retrieved (after running the response through any interceptors you define)
Long story short in this case move this bit of code
$scope.filterItem = {
discipline: $scope.results.disciplines[0]
};
Into the callback after the $scope.results has been assigned.
If you use $http (like $http.get(url) or $http.post(data,url)) the calls return an HTTPPromise so you can use success and error handler functions on the promise to get the data.