加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 10:20:24 所属栏目:安全 来源:网络整理
导读:官方的restangular文档 provides这个代码示例在ErrorInterceptor中重试一个请求: var refreshAccesstoken = function() { var deferred = $q.defer(); // Refresh access-token logic return deferred.promise;};Restangular.setErrorInterceptor(function(
官方的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,只需打开你的网络选项卡然后点击按钮,你应该看到所有请求都在那里.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读