0
我使用restangular來對我的後端進行多次調用,我對第一次調用的結果依賴於執行後續調用。如何在重試後繼續承諾鏈?
我試圖設置重試邏輯,以便在重試成功後執行請求。這裏是我到目前爲止的代碼:
reefService.createGitLabProject(formData)
.then(function(apiResponse) {
$scope.apiStatus.messages.push({'direction': 'in', 'body': apiResponse.result});
$scope.progressValue += 1;
var gitLabProject = {
'id': apiResponse.data.id,
'http_url_to_repo': apiResponse.data.http_url_to_repo,
'ssh_url_to_repo': apiResponse.data.ssh_url_to_repo
};
// add deploy key
reefService.addGitLabDeployKey(gitLabProject)
.then(function(apiResponse) {
$scope.apiStatus.messages.push({'direction': 'in', 'body': apiResponse.result});
$scope.progressValue += 1;
})
.catch(function(apiError) {
$scope.apiStatus.errors.push(apiError);
});
// add web hook
reefService.addGitLabProjectHook(gitLabProject)
.then(function(apiResponse) {
$scope.apiStatus.messages.push({'direction': 'in', 'body': apiResponse.result});
$scope.progressValue += 1;
})
.catch(function(apiError) {
$scope.apiStatus.errors.push(apiError);
});
// failed to create project
})
.catch(function(apiError) {
$scope.apiStatus.errors.push(apiError);
});
重試手動調用,它是從$scope.apiStatus.errors
傳遞apiError
restangular對象。我使用的是以下幾點:
$scope.retryRequest = function(error){
var restAngularConf = error.config;
$http(restAngularConf)
.then(function(apiResponse) {
$scope.progressValue += 1;
// add response to messages
$scope.apiStatus.messages.push({'direction': 'in', 'body': apiResponse.data.result});
// delete error from errors array
var ix = $scope.apiStatus.errors.indexOf(error);
$scope.apiStatus.errors.splice(ix, 1);
})
.catch(function(apiError) {
toaster.pop('error', 'Retry Error', apiError.data.message);
});
};
它基本上接收apiError
,並運行在apiError.config
(URL,POST數據等)$http
使用呼叫數據。這對撥號沒有任何依賴關係,如addGitLabDeployKey
和addGitLabProjectHook
,我很難解決如何設置createGitLabProject
,以便在其錯誤傳遞到$scope.retryRequest
和請求完成後,addGitLabDeployKey
和addGitLabProjectHook
繼續。
如何在createGitLabProject
中設置$q
服務,讓請求鏈在重試後繼續?
非常感謝您的幫助!