我正在使用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);
});
手动调用重试,它从apiError
传递$scope.apiStatus.errors
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
并使用$http
中的数据运行apiError.config
来调用(网址,发布数据等)。这适用于没有addGitLabDeployKey
和addGitLabProjectHook
等依赖项的调用,我无法设置如何设置createGitLabProject
以便在将错误传递给$scope.retryRequest
之后请求完成,addGitLabDeployKey
和addGitLabProjectHook
继续。
如何在$q
中设置createGitLabProject
服务,以便在重试后继续请求链?
非常感谢你的帮助!
答案 0 :(得分:0)
看来我错过了承诺点,我需要在函数中包装它并传递函数重试数组并以这种方式重试...