Angular JSON-RPC:处理错误
Posted
技术标签:
【中文标题】Angular JSON-RPC:处理错误【英文标题】:Angular JSON-RPC: processing error 【发布时间】:2015-01-02 19:34:52 【问题描述】:我正在尝试改进 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 服务时最初设置的“错误”承诺?
$http.get(url).then(success(data) ..., error(data) ...;
这是一种正确的方法还是我应该更好地将我的修改基于拦截器?
【问题讨论】:
【参考方案1】:如果你保留原来的代码,你可以定义一个使用 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()中处理错误
【讨论】:
以上是关于Angular JSON-RPC:处理错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Angular 错误处理获取控制台上出现的 CORS 错误?
处理内存不足后返回的 Angular API 致命错误处理程序