Angularjs 如何在拦截器中取消响应
如果传递了错误代码,如何取消响应处理? 我希望捕获一个错误代码为500的响应,并防止自定义服务请求调用执行其错误和成功函数。我希望响应“停留”在拦截器中,而不是传递给我的自定义服务成功或错误回调。我怎样才能做到这一点?是否有“拦截”响应并在全球范围内处理它们的最佳实践 My拦截器具有以下功能:Angularjs 如何在拦截器中取消响应,angularjs,Angularjs,如果传递了错误代码,如何取消响应处理? 我希望捕获一个错误代码为500的响应,并防止自定义服务请求调用执行其错误和成功函数。我希望响应“停留”在拦截器中,而不是传递给我的自定义服务成功或错误回调。我怎样才能做到这一点?是否有“拦截”响应并在全球范围内处理它们的最佳实践 My拦截器具有以下功能: function responseError( response ) { switch ( response.status ) { case 500:
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按原样返回响应的想法,因为这样您的错误就会落入一个可能难以调试的黑洞。我不想恢复,我希望响应“保持”在拦截器中,不会传递给我的自定义服务成功或错误回调。您希望如何通知调用方承诺已完成?您必须解决或拒绝承诺,否则来电者将永远等待,直到解决或拒绝承诺。这就是承诺的契约。