Angular JSON-RPC:处理错误
Angular JSON-RPC: processing error
我正在尝试改进 AngularJS 服务以调用远程 JSON-RPC 服务。按照JSON-RPC规范,当服务器端发生异常时,响应中应该包含一个错误对象,其描述相同:
response = {
jsonrpc: "2.0",
result: null,
error: "Description of the error",
id: 1,
}
... 其中 "id" 是发送到服务器的原始请求的标识符。
我正在尝试改进的 Angular 组件 (https://github.com/ajsd/angular-jsonrpc) 使用 $http 转换器处理来自服务器的响应。我修改了原来的变压器,使新的变成这样:
transforms.push(function(data) {
//Original code: return data.id === id ? data.result || data.error : null;
if (data.error !== null) {
throw data.error;
}
if (data.id !== id) {
throw '[jsonrpc] Wrong response ID, id = ' + data.id;
}
return data.result;
});
如你所见,我抛出了一个异常,并附有错误的描述;这是一个非常糟糕的解决方案,因为该服务基于 $http 承诺,因此,该服务的调用者将发现很难捕获异常。
我如何从 $http 转换器中调用用户最初在调用 $http 服务时设置的 "error" 承诺?
$http.get(url).then(success(data) {...}, error(data) {...}};
这是正确的方法还是我应该更好地基于拦截器进行修改?
如果您保留原来的代码,您可以定义一个使用 jsonrpc 模块的服务:
angular.module('myApp').
service('jsonrpcservice', function(jsonrpc) {
var service = jsonrpc.newService('svc');
this.get = service.createMethod('getData');
});
..在你的控制器某处:
jsonrpcservice.get({params}).success(function(result){}).error(function(err){});
您可以在 $http
返回的 .error() 中处理错误
我正在尝试改进 AngularJS 服务以调用远程 JSON-RPC 服务。按照JSON-RPC规范,当服务器端发生异常时,响应中应该包含一个错误对象,其描述相同:
response = {
jsonrpc: "2.0",
result: null,
error: "Description of the error",
id: 1,
}
... 其中 "id" 是发送到服务器的原始请求的标识符。
我正在尝试改进的 Angular 组件 (https://github.com/ajsd/angular-jsonrpc) 使用 $http 转换器处理来自服务器的响应。我修改了原来的变压器,使新的变成这样:
transforms.push(function(data) {
//Original code: return data.id === id ? data.result || data.error : null;
if (data.error !== null) {
throw data.error;
}
if (data.id !== id) {
throw '[jsonrpc] Wrong response ID, id = ' + data.id;
}
return data.result;
});
如你所见,我抛出了一个异常,并附有错误的描述;这是一个非常糟糕的解决方案,因为该服务基于 $http 承诺,因此,该服务的调用者将发现很难捕获异常。
我如何从 $http 转换器中调用用户最初在调用 $http 服务时设置的 "error" 承诺?
$http.get(url).then(success(data) {...}, error(data) {...}};
这是正确的方法还是我应该更好地基于拦截器进行修改?
如果您保留原来的代码,您可以定义一个使用 jsonrpc 模块的服务:
angular.module('myApp').
service('jsonrpcservice', function(jsonrpc) {
var service = jsonrpc.newService('svc');
this.get = service.createMethod('getData');
});
..在你的控制器某处:
jsonrpcservice.get({params}).success(function(result){}).error(function(err){});
您可以在 $http
返回的 .error() 中处理错误