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 致命错误处理程序

关于前后端接口的异常的处理

Angular 2 错误:未处理的承诺拒绝:模板解析错误:多个组件:

Angular:$http 404 错误处理

Angular / Ionic - 处理 JSON“错误”属性