我正在尝试使用HttpInterceptor及其responseError属性进行一些HTTP请求验证。
我找到了一些关于如何使用常规AngularJS执行此操作的示例,但到目前为止还没有运气Angular Dart,我只得到一个 Class'String'没有实例getter'iterator'异常。
另外,我找不到$ q.reject(响应)的等价物;在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;
}
});
}
答案 0 :(得分:0)
终于明白了。为了不让未来的侦听器崩溃,responseError需要发送Future.error。
解决方案:
var intercept = new HttpInterceptor();
intercept.responseError = (dynamic error) {
return new Future.error(error); //<-- return a Future.error
};
interceptors.add(intercept);