dart - 在Angular Dart中使用HttpInterceptor.responseError时出错

标签 dart angular-dart

我正在尝试使用HttpInterceptor及其responseError属性进行一些HTTP请求验证。

我找到了很多使用常规AngularJS进行操作的示例,但是到目前为止,Angular Dart运气不好,我只得到了一个类'String',没有实例获取方法'iterator'异常。

另外,我找不到等效的$ q.reject(response);。在Angular Dart中,根本需要吗?

AngularJS示例代码:

var interceptor = ['$location', '$q', function($location, $q) {
    function success(response) {
        return response;
    }

    function error(response) {

        if(response.status === 401) {
            $location.path('/login');
            return $q.reject(response);
        }
        else {
            return $q.reject(response);
        }
    }

    return function(promise) {
        return promise.then(success, error);
    }
}];

我的看法:

@Injectable()
class MyService {

  HttpInterceptors interceptors;

  MyService(this.interceptors) {
    var intercept = new HttpInterceptor();
    intercept.responseError = (dynamic error) {
      return error;
    };
    interceptors.add(intercept);
}

[更新]
似乎添加一个带有responseError的拦截器会使事情变得困惑。
Future _loadData() {
  return _http.get("http://localhost/file-that-doesnt-exist.json")
    .then((HttpResponse response) {  //<-- This gets called if I add an interceptor with a responseError
      _dataCache = new Map();
      print("MAPPING");
      for (Map post in response.data) {
        Post p = new Post.fromJsonMap(post);
        _dataCache[p.id] = p;
      }
    });
}

最佳答案

终于明白了。为了不弄乱将来的侦听器,responseError需要发送Future.error。

解:

var intercept = new HttpInterceptor();
intercept.responseError = (dynamic error) {
  return new Future.error(error); //<-- return a Future.error
};
interceptors.add(intercept);

关于dart - 在Angular Dart中使用HttpInterceptor.responseError时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23564088/

相关文章:

Flutter:垂直文本小部件

flutter - 如何在 Dart 中获取重定向 url?

angular - AngularDart-如何在AppLayout中替换组件

angular - Dart Angular 形成原始/脏动态

dart - 如何使用 AngularDart 将对象从 ng-repeat 传递到组件?

firebase - Flutter firebase 处理异常

dart - 如何使用 Homebrew 降级 Dart

dart - 从AngularDart组件调用googleapis_auth流

dart - 使用 6 个模板参数创建一个 Angular.Dart Cube 组件

dart - 用web_components代替shadow_dom进行angular-dart