2015-01-02 74 views
1

我正在尝试改进用于调用远程JSON-RPC服务的AngularJS服务。根据JSON-RPC说明书中,当发生异常时在服务器侧,响应应该包括具有相同的内容的错误对象:Angular JSON-RPC:处理错误

response = { 
    jsonrpc: "2.0", 
    result: null, 
    error: "Description of the error", 
    id: 1, 
} 

...,其中“id”为的标识符请求原始发送到服务器。

我试图改进的角度组件(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 promises,因此,服务的调用者会发现难以发现异常。

如何从$ 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'); 

}); 

..in控制器的地方:

jsonrpcservice.get({params}).success(function(result){}).error(function(err){}); 

可以处理由$ http返回的.error()中的错误