Angular.js代码与$ httpProvider和promise.它有什么作用?

Pau*_*aul 3 httpresponse interceptor promise angularjs

你能解释一下这段代码的作用:

App.config(['$httpProvider', function ($httpProvider) {
  $httpProvider.responseInterceptors.push('HttpSpinnerInterceptor');
  $httpProvider.defaults.transformRequest.push(function (data, headersGetter) {
    angular.element('.brand img').attr("src","<%= asset_path('brand/brand.gif') %>");
    return data;
  });
}]);

App.factory('HttpSpinnerInterceptor', function ($q, $window) {
  return function (promise) {
    return promise.then(function (response) {
      angular.element('.brand img').attr("src","<%= asset_path('brand/brand.png') %>");
      return response;
    }, function (response) {
      angular.element('.brand img').attr("src","<%= asset_path('brand/brand.png') %>");
      return $q.reject(response);
    });
  };
});
Run Code Online (Sandbox Code Playgroud)

我完全没有理解,除了一些猜测,它拦截了一些响应并注入了图像的src属性.

我不明白HttpSpinnerInterceptor是如何以及何时被调用的以及"promise"参数是什么.

Val*_*nov 5

  1. HttpSpinnerInterceptor是在使用$http服务发出的每个请求完成(成功与否)之后调用的,但是在将promise解析为调用者之前(因此可以推迟结果).实际上不需要转换请求,因为它与HttpSpinnerInterceptor(或者不需要HttpSpinnerInterceptor)大致相同,因为它不会转换任何东西.

  2. promise参数是一个$q承诺,如果您需要在请求结果时执行某些异步操作,可以使用,因为您可以在以后解析它,因此调用者稍后会得到结果.实际上在您的代码中,您直接解决此承诺(或拒绝它),更改图像的src属性.

以下是一些文档链接:

  1. 使用$http服务:http://docs.angularjs.org/api/ng.$http - 仔细查看" 响应拦截器 "和" 转换请求和响应 "
  2. AngularJS中的承诺:http://docs.angularjs.org/api/ng.$q