从angular$http获取promise数据
Get promise data from angular $http
嘿,我正在尝试为$http promise构建一些默认验证。我这样做的原因是,我有多个返回相同结果结构的请求。因此,将处理程序与请求分离以减少代码重复是合乎逻辑的
假设我有这个请求:
getMoreUsers: function(searchid, apiroute, limit) {
console.log(apiroute);
return $http({
method: 'get',
url: WeAlertApiUrl + apiroute,
params: {
'searchid' : searchid,
'start' : limit }
}).then( function(data) {
if(data.data.isValid === true) {
return processUsers(data.data.users);
}else {
$cordovaToast.showShortTop(data.data.message).then(function(success) {
}, function (error) {alert(data.data.message);});
}
}, function(error) {
$cordovaToast.showShortTop("something went wrong..").then(function(success) {
}, function (error) {alert("Something went wrong..");});
});
},
唯一不一致的是data.data.users
所以理想情况下,我想构建这样的东西:
getMoreUsers: function(searchid, apiroute, limit) {
console.log(apiroute);
return $http({
method: 'get',
url: WeAlertApiUrl + apiroute,
params: {
'searchid' : searchid,
'start' : limit }
}).then(
return handleResult(processUsers(data.data.users))
});
},
这是可以实现的吗?以及我如何访问$http的承诺并将其发送到服务
多亏了@Bergi,我才得以解决!getmoreusers服务现在看起来像
getMoreUsers: function(searchid, apiroute, limit) {
console.log(apiroute);
return $http({
method: 'get',
url: WeAlertApiUrl + apiroute,
params: {
'searchid' : searchid,
'start' : limit }
}).then(function(res){return successHandler(res, 'users');}, errorHandler);
},
成功和错误处理程序的包装方式如下:
.factory('successHandler', function($cordovaToast, processAlerts, processUsers, processBerichten, processReacties, processUserAlerts) {
return function(data, type) {
if(data.data.isValid === true){
switch(type){
case 'users':
return processUsers(data.data[type]);
case 'alerts':
return processAlerts(data.data[type]);
case 'berichten':
return processBerichten(data.data[type]);
case 'reacties':
return processReacties(data.data[type]);
case 'useralerts':
return processUserAlerts(data.data[type]);
}
}else {
$cordovaToast.showShortTop(data.data.message).then(function(success) {
}, function (error) {alert(data.data.message);});
}
};
}).factory('errorHandler', function($cordovaToast) {
return function(error) {
$cordovaToast.showShortTop("Er ging iets mis... bent u verbonden met het internet?").then(function(success) {
}, function (error) {
alert("Er ging iets mis... bent u verbonden met het internet?");
});
};
})
否,返回data.data.users
完全可以。您将希望return
对已处理数据的承诺,这样您的呼叫者就可以像一样使用它们
getMoreUsers(…).then(handleResult);
为此,全局错误处理程序还应该重新抛出异常
getMoreUsers: function(searchid, apiroute, limit) {
console.log(apiroute);
return $http({
method: 'get',
url: WeAlertApiUrl + apiroute,
params: {
'searchid' : searchid,
'start' : limit }
}).then(function(data) {
if (data.data.isValid) {
return processUsers(data.data.users);
} else {
throw new Error(data.data.message);
}
}, function(error) {
throw new Error("something went wrong.."); // ignore `error` details
}).catch(function(error) {
$cordovaToast.showShortTop(error.message).catch(function(showError) {
alert(error.message);
});
throw error;
});
},
相关文章:
- AngularJS promise在加载数据之前得到解决
- 将数据从promise then方法传递到对象方法
- 如何使用bluebird将原始数据与Promise.map的响应一起传递
- 从angular$http获取promise数据
- 如何从Promise中提取数据
- 如何测试从promise对象获取数据的控制器
- 使用从内部函数返回的异步数据对外部函数返回promise
- 序列promise链与数组数据,如何解析promise链
- promise.all只返回第一个数据
- 在Angular服务中使用$http时,为什么要返回promise和数据
- 如何使用promise获取Google Places数据
- Angular promise服务作为全局数据服务
- 将数据传递到JavaScript Promise中
- 使用promise和递归查找多个随机数据
- Angular promise从JSON API返回不正确的数据
- 无法在 javascript 中使用 promise.push 附加数据
- 从 Angular Promise 获取数据
- Chained Promise with Express:在最后一步中未收到任何数据
- 如何使promise数据对象在控制器中可用,并将数据从promise传递给新函数
- 将$promise数据放入Javascript数组中