sourcecode

Angularjs는 거부 체인을 약속합니다.

copyscript 2023. 2. 28. 23:42
반응형

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

반응형