2015-01-02 104 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()中的錯誤