2015-02-05 25 views
0

我正在開發通常在線但可以脫機的SPA,並且必須將所有請求記錄到API中。當某些請求失敗時,我應該稍後重試。重新刷新後重新保存並重試

我有一個本地數據庫來保存所有請求。當我的應用程序啓動時,我檢索它們並重試標記爲的那些。

我需要的是一種基於我已發送的配置Restangular對象的方法。我有一個響應攔截器,我保存了restangular響應對象。

{ 
    config: { 
    headers: Object, 
    method: "GET", 
    params: Object, 
    transformRequest: Array[1], 
    transformResponse: Array[1], 
    url: "..." 
    }, 
    data: {...}, 
    headers: {...}, 
    status: 200, 
    statusText: "OK" 
} 

是否有一個函數用給定的配置對象創建一個Restangular?

感謝

回答

0

如果我想這樣做,我會設置setErrorInterceptor

var yourLocalDb = function($http) { 
    var failedRequests = []; 

    this.store = function(request) { 
     this.failedRequests.push(request); 
    } 

    this.retry = function() { 
    var self = this; 
    angular.forEach(this.failedRequests,function(request) { 
     $http(request.response.config).then(function() { 
     //in case of success 
     self.failedRequests.splice(self.failedRequests.indexOf(request),1); 
     request.responseHandler.apply(undefined,arguments); 
     }), request.deferred.reject); 
    }); 

    } 
} 


Restangular.setErrorInterceptor(function(response, deferred, responseHandler) { 

    yourLocalDb.store({ 
    response : response, 
    responseHandler : responseHandler, 
    deffered : deffered 
    }); 
} 

然後當你有連接,你可以叫

yourLocalDb.retry(); 

沒有測試,但它應該給你線索。

+0

謝謝你的回答。幾個月前我退出了該項目,但在此之前我做了類似的事情,我無法再對其進行測試 – subarroca 2016-01-28 11:57:19