반응형
Angularjs는 거부 체인을 약속합니다.
연쇄 약속을 작성해야 합니다.
var deferred = $q.defer();
$timeout(function() {
deferred.reject({result: 'errror'});
}, 3000);
deferred.promise.then(angular.noop, function errorHandler(result) {
//some actions
return result;
}).then(function successCallback(result) {
console.log('what do I do here?');
return result;
}, function errorCallback(result) {
$scope.result= result;
return result;
});
errorCallback을 첫 번째에 입력했을 경우then
, 두 번째then
해결되고 그 successCallback이 호출됩니다.다만, 를 삭제하면errorHandler
두 번째 약속은 거부됩니다.
Angular JS 문서에 따르면 거부를 전파하는 유일한 방법은 반환하는 것입니다.$q.reject();
명백해 보이진 않아요 특히 제가 주사를 놔야 하기 때문에$q
필요하지 않은 경우에도 서비스
에 예외를 두는 것으로도 실행할 수 있습니다.errorHandler
단, 예외 트레이스를 콘솔에 쓰기 때문에 좋지 않습니다.
이를 명확하게 하기 위한 다른 방법이 있습니까?그리고 그 이유는 무엇입니까?왜 그랬을까요?어떤 경우에 현재의 행동이 유용할 수 있습니까?
그리고 왜 그렇게 되었는지.어떤 경우에 현재의 행동이 유용할 수 있습니까?
error Handler에서는 에러 상태를 복구하고 약속을 어떻게든 해결하려고 시도할 수 있습니다.
var retriesCount = 0;
function doWork()
{
return $http.post('url')
.then(function(response){
// check success-property of returned data
if(response.data.success)
// just unwrap data from response, may be do some other manipulations
return response.data;
else
// reject with error
return $q.reject('some error occured');
})
.catch(function(reason){
if(retriesCount++ < 3)
// some error, let me try to recover myself once again
return doWork();
else
// mission failed... finally reject
return $q.reject(reason);
});
}
doWork().then(console.log, console.error);
파티에 늦었지만, 내가 여기 있으니
사용하는 것이 좋습니다.$http
에러에 대해서는, 에러에 의해서 성공이 반환되는 것이 아니라, 본래의 에러 처리의 에러입니다.200
에러 상태가 표시됩니다.
인쇄400
또는500
콘솔 오류는 문제가 되지 않습니다.디버깅을 하고 있으면 표시되지 않으면 표시됩니다.
angular.module('workModule', [])
// work provider handles all api calls to get work
.service('workProvider', ['$http', '$q', function($http, $q) {
var endpoint = '/api/v1/work/';
this.Get = function(){
// return the promise, and use 404, 500, etc for errors on the server
return $http.get(endpoint);
};
}])
.controller('workController', ['workProvider', function('workProvider'){
workProvider.Get().then(
function(response){ // success
console.log(response.data);
},
function(response){ // error
console.log(response.data);
}
)
}])
언급URL : https://stackoverflow.com/questions/18758058/angularjs-promise-rejection-chaining
반응형
'sourcecode' 카테고리의 다른 글
스프링 부트:장치 테스트에서 클래스 경로에서 리소스를 읽는 방법 (0) | 2023.02.28 |
---|---|
형식 설명: 'react' 모듈을 찾을 수 없습니다. (0) | 2023.02.28 |
ng-click을 사용할 때 '새 탭에서 열기'를 허용하는 방법은 무엇입니까? (0) | 2023.02.28 |
PL/SQL 블록에서 SELECT 문을 출력할 수 있습니까? (0) | 2023.02.28 |
구텐베르크 커스텀 배너 블록 페이지 제목 사용 (0) | 2023.02.28 |