angularjs – 在拦截器中重试Restangular调用

前端之家收集整理的这篇文章主要介绍了angularjs – 在拦截器中重试Restangular调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
官方的restangular文档 provides这个代码示例在ErrorInterceptor中重试一个请求:
var refreshAccesstoken = function() {
    var deferred = $q.defer();

    // Refresh access-token logic

    return deferred.promise;
};

Restangular.setErrorInterceptor(function(response,deferred,responseHandler) {
    if(response.status === 403) {
        refreshAccesstoken().then(function() {
            // Repeat the request and then call the handlers the usual way.
            $http(response.config).then(responseHandler,deferred.reject);
            // Be aware that no request interceptors are called this way.
        });

        return false; // error handled
    }

    return true; // error not handled
});

但是,正如它在评论中所说,第二次尝试不会触发任何拦截器,因为它直接使用$http.

有没有办法让第二个请求也通过Restangular管道并执行ErrorInterceptor?

实际上,使用Restangular进行的请求使用的promise只能被解析一次.如果拒绝,您无法重新发送.

我真的不知道你是否想要一个可重用的errorInterceptor,但是服务的工作方式似乎不允许简单地从响应对象配置重新构建一个Restangular对象.

你可以做的一件事是保存对象的引用,然后在拦截器中使用它.

你应该有你的理由,但是我必须用这个来警告你,因为如果失败并且如果它仍然存在,你最终会得到一个无限的调用,因为Restangular总是会调用errorInterceptor.

我已经为演示模拟了一个小小的Plunkr,只需打开你的网络选项卡然后点击按钮,你应该看到所有请求都在那里.

原文链接:https://www.f2er.com/angularjs/240576.html

猜你在找的Angularjs相关文章