我从元数据构建元素,我需要为每个元素设置一个计算类。
这就是我目前的工作,
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
时,配置不会继承到解析功能(仅限数据)。
感谢。
答案 0 :(得分:1)
使用标准
then
方法和两个http返回一个promise对象 具体方法:success
和error
。那么方法需要两个 参数成功和错误回调将使用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() { .. })