将范围数据传递到$ http函数

时间:2014-06-20 07:32:21

标签: angularjs promise

我从元数据构建元素,我需要为每个元素设置一个计算类。

这就是我目前的工作,

var promisses =_.map(templates, function (tmpl) {
  return $http.get(tmpl.template, {
    cache   : $templateCache,
    // Generated class name is carried to the resolving function using the config
    classes : scope.generate_class(tmpl.columns)
  }).then(function (data) {
    if ( data.status != 200 )
      throw new Error('Failed to fetch template');
    var elm = angular.element(data.data);
    elm.addClass(data.config.classes);
    return elm;
  });
});

$q.all(promisses).success.... 

如果我想使用success而不是then $http位(在发生错误的情况下进行评估),我该怎么做?当使用success时,配置不会继承到解析功能(仅限数据)。

感谢。

1 个答案:

答案 0 :(得分:1)

来自$http docs

  

使用标准then方法和两个http返回一个promise对象   具体方法:successerror。那么方法需要两个   参数成功和错误回调将使用a调用   响应对象。成功和错误方法只需一个参数    - 分别在请求成功或失败时调用的函数。 传递给这些函数的参数是   传递给的反应对象的结构化表示   方法

     

响应对象具有以下属性:

     
      
  • 数据 - {string | Object} - 使用转换函数转换的响应正文。
  •   
  • 状态 - {number} - 响应的HTTP状态代码。
  •   
  • 标题 - {function([headerName])} - 标题获取功能。
  •   
  • config - {Object} - 用于生成请求的配置对象。
  •   
  • statusText - {string} - 响应的HTTP状态文本。
  •   

所以你可以像这样传递配置:

.success(function(data, status, headers, config) {

使用promises时不要抛出错误,如果你的服务器没有返回错误代码,你可以使用q.reject将其转换为拒绝,同时q.all promises没有成功的方法:

var promisses =_.map(templates, function (tmpl) {
  return $http.get(tmpl.template, {
    cache   : $templateCache,
    // Generated class name is carried to the resolving function using the config
    classes : scope.generate_class(tmpl.columns)
  }).then(function(res) {
    if ( res.status != 200 ) {
      return $q.reject('Failed to fetch template');
    } else {
      var elm = angular.element(res.data);
      elm.addClass(res.config.classes);
      return elm;
    }
  });
});

$q.all(promisses)
  .then(function() { ... })
  .catch(function() { .. })