使用HttpInterceptor时出错.Angular Dart中的responseError



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

我找到了一堆关于如何在常规AngularJS中做到这一点的例子,但到目前为止,在Angular Dart中没有运气,我只得到一个类'String'没有实例getter '迭代器'异常。

同样,我找不到$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);

最新更新