Angularjs 如何在拦截器中取消响应

Angularjs 如何在拦截器中取消响应,angularjs,Angularjs,如果传递了错误代码,如何取消响应处理? 我希望捕获一个错误代码为500的响应,并防止自定义服务请求调用执行其错误和成功函数。我希望响应“停留”在拦截器中,而不是传递给我的自定义服务成功或错误回调。我怎样才能做到这一点?是否有“拦截”响应并在全球范围内处理它们的最佳实践 My拦截器具有以下功能: function responseError( response ) { switch ( response.status ) { case 500:

如果传递了错误代码,如何取消响应处理? 我希望捕获一个错误代码为500的响应,并防止自定义服务请求调用执行其错误和成功函数。我希望响应“停留”在拦截器中,而不是传递给我的自定义服务成功或错误回调。我怎样才能做到这一点?是否有“拦截”响应并在全球范围内处理它们的最佳实践

My拦截器具有以下功能:

function responseError( response ) {
        switch ( response.status ) {
            case 500:
                // cancel the processing of this response
                // prevent the response from calling error at "HERE" below
                // currently, the error function is called, 
                // even when the response is rejected here
                break;
        }

        return $q.reject( response );
    }
function getJson( url, params ) {
        var deferred = $q.defer();
        $http( {
            url: that.host + url,
            method: "GET",
            params: params || {},
            headers: {
                'Accept': 'application/json'
            }
        } ).success( function ( data, status, headers, config ) {
            deferred.resolve( data );
        } ).error( function ( data ) {
            deferred.reject( data );
        } ) ;

        return deferred.promise;
    }
My后端服务具有以下功能:

function responseError( response ) {
        switch ( response.status ) {
            case 500:
                // cancel the processing of this response
                // prevent the response from calling error at "HERE" below
                // currently, the error function is called, 
                // even when the response is rejected here
                break;
        }

        return $q.reject( response );
    }
function getJson( url, params ) {
        var deferred = $q.defer();
        $http( {
            url: that.host + url,
            method: "GET",
            params: params || {},
            headers: {
                'Accept': 'application/json'
            }
        } ).success( function ( data, status, headers, config ) {
            deferred.resolve( data );
        } ).error( function ( data ) {
            deferred.reject( data );
        } ) ;

        return deferred.promise;
    }
最后,自定义服务调用请求:

 return BackendService.getJson( "/abc/def", params )
                .then( function ( data ) {
                    return data;
                }, function( data ) {
                    // HERE error function should not be called, if 500
                } );

您可以使用
responseError
拦截器。在此拦截器中,您可以确定是否可以从收到的错误中恢复,如果可以,则执行恢复。它会在每次拒绝任何其他http请求时运行。有关更多信息,请参阅。我不会将此作为答案发布,因为我从未使用过该API,也没有代码示例可供您参考。谢谢。我知道这是可以做的。问题是如何?…就像我说的-你试着看看你是否能从错误中恢复过来(这是你唯一能实现的逻辑)。如果可以,则执行此操作并返回
resolve()
。否则返回一个
拒绝()
。任何未处理的错误都会传播到顶部。我不喜欢@NewDevs按原样返回响应的想法,因为这样您的错误就会落入一个可能难以调试的黑洞。我不想恢复,我希望响应“保持”在拦截器中,不会传递给我的自定义服务成功或错误回调。您希望如何通知调用方承诺已完成?您必须解决或拒绝承诺,否则来电者将永远等待,直到解决或拒绝承诺。这就是承诺的契约。你可以使用
responseError
拦截器。在此拦截器中,您可以确定是否可以从收到的错误中恢复,如果可以,则执行恢复。它会在每次拒绝任何其他http请求时运行。有关更多信息,请参阅。我不会将此作为答案发布,因为我从未使用过该API,也没有代码示例可供您参考。谢谢。我知道这是可以做的。问题是如何?…就像我说的-你试着看看你是否能从错误中恢复过来(这是你唯一能实现的逻辑)。如果可以,则执行此操作并返回
resolve()
。否则返回一个
拒绝()
。任何未处理的错误都会传播到顶部。我不喜欢@NewDevs按原样返回响应的想法,因为这样您的错误就会落入一个可能难以调试的黑洞。我不想恢复,我希望响应“保持”在拦截器中,不会传递给我的自定义服务成功或错误回调。您希望如何通知调用方承诺已完成?您必须解决或拒绝承诺,否则来电者将永远等待,直到解决或拒绝承诺。这就是承诺的契约。