Angular 错误和超时工厂
Angular Error and Timeout Factory
在我的整个项目中,我有一段代码通过 REST API 使用 Parse.com 执行 CRUD。我想在错误处理程序中插入一个通用(项目范围)错误函数的函数。
我考虑过工厂/服务或可能通过 $rootScope
传递一些东西。
其次,我想将我所有的 api 调用包装在超时函数中,这样如果在特定时间内没有响应,我就可以通过有用的通知通知用户。
ParseFactory.provider('Programme').getAll().success(function(data){
$scope.programmes = data.results;
}).error(function(response){
$ionicPopup.alert({
title: 'Unable to load - Please check your connection '
});
});
任何关于如何最好地实现这一点的例子都会受到欢迎。
=== 编辑 - 添加 ParseFactory 代码 ===
.factory('ParseFactory',['$http','PARSE_CREDENTIALS',function($http,PARSE_CREDENTIALS){
var baseUrl = 'https://api.parse.com/1/classes/';
return {
provider:function(type) {
var userQuery = {'userId': Parse.User.current().id};
return {
getAll:function(){
return $http.get(getUrl(type),getUserParams());
},
get:function(id){
return $http.get(getUrl(type)+id,getParams());
},
create:function(data){
return $http.post(getUrl(type),data,getParams());
},
edit:function(id,data){
return $http.put(getUrl(type)+id,data,getParams());
},
delete:function(id){
return $http.delete(getUrl(type)+id,getParams());
}
}
function getUrl(type) {
return baseUrl+type;
}
function getParams() {
return {
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type':'application/json'
}
}
}
}
}
}])
非常感谢
Regarding single error handler function which shows the ionicPopup:
您可以使用 $rootScope.$emit
从错误回调函数中发出事件。
您可以在 run()
方法或 factory
中使用 $rootScope.$on
收听所有这些事件,它将显示 $ionicPopup
在您的错误处理程序中:
$rootScope.$emit('errorEvent',
{"message" : "Pass your custom message here", "errorObject": errorObject}
);
在你的 event
监听器中
app.run(function($ionicPopup) {
$rootScope.$on("errorEvent", function(event, data) {
// you can access that here
$ionicPopup.alert({
title: data.message
});
});
});
更新:
对于超时选项,在您的 getParams()
函数中添加超时配置 属性
function getParams() {
return {
timeout: 18000, // adjust this value
headers: {
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key': PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type': 'application/json'
}
}
}
在我的整个项目中,我有一段代码通过 REST API 使用 Parse.com 执行 CRUD。我想在错误处理程序中插入一个通用(项目范围)错误函数的函数。
我考虑过工厂/服务或可能通过 $rootScope
传递一些东西。
其次,我想将我所有的 api 调用包装在超时函数中,这样如果在特定时间内没有响应,我就可以通过有用的通知通知用户。
ParseFactory.provider('Programme').getAll().success(function(data){
$scope.programmes = data.results;
}).error(function(response){
$ionicPopup.alert({
title: 'Unable to load - Please check your connection '
});
});
任何关于如何最好地实现这一点的例子都会受到欢迎。
=== 编辑 - 添加 ParseFactory 代码 ===
.factory('ParseFactory',['$http','PARSE_CREDENTIALS',function($http,PARSE_CREDENTIALS){
var baseUrl = 'https://api.parse.com/1/classes/';
return {
provider:function(type) {
var userQuery = {'userId': Parse.User.current().id};
return {
getAll:function(){
return $http.get(getUrl(type),getUserParams());
},
get:function(id){
return $http.get(getUrl(type)+id,getParams());
},
create:function(data){
return $http.post(getUrl(type),data,getParams());
},
edit:function(id,data){
return $http.put(getUrl(type)+id,data,getParams());
},
delete:function(id){
return $http.delete(getUrl(type)+id,getParams());
}
}
function getUrl(type) {
return baseUrl+type;
}
function getParams() {
return {
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type':'application/json'
}
}
}
}
}
}])
非常感谢
Regarding single error handler function which shows the ionicPopup:
您可以使用 $rootScope.$emit
从错误回调函数中发出事件。
您可以在 run()
方法或 factory
中使用 $rootScope.$on
收听所有这些事件,它将显示 $ionicPopup
在您的错误处理程序中:
$rootScope.$emit('errorEvent',
{"message" : "Pass your custom message here", "errorObject": errorObject}
);
在你的 event
监听器中
app.run(function($ionicPopup) {
$rootScope.$on("errorEvent", function(event, data) {
// you can access that here
$ionicPopup.alert({
title: data.message
});
});
});
更新:
对于超时选项,在您的 getParams()
函数中添加超时配置 属性
function getParams() {
return {
timeout: 18000, // adjust this value
headers: {
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key': PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type': 'application/json'
}
}
}