外观
Reference: AngularJS in Action
Services are a way to define functionality that's common to the entire application.
There are five types of services that you can define using the module convenience methods: module.constant, module.value, module.service, module.factory, and module.provider.
Communication with remote servers is facilitated with the $http service, which has shortcut methods built into it that mirror REST verbs.
The $http service is based on a deferred / promise API that provides mechanisms for you to handle asynchronous calls to the server.
Further control over asynchronous operations can be exerted (运用、发挥、施以影响) by using a deferred object returned by calling $q.deferred.
Calls made using $http can be intercepted by creating an interceptor ad pushing it into the $httpProvider.interceptors array during the module.config block.
Services can be enhanced by capturing them in a $provide.decorator call in the module.config block and modifying its behavior.
$httpBackend is great for mocking out server-side calls and defining the response.
Manually resolve a promise in a unit test by calling $rootScope.$digest.