【发布时间】:2018-01-17 15:24:47
【问题描述】:
我正在尝试使用 resolve 在我的 Angular 4 项目中预取一个 http 请求,但是只要节点服务器有错误响应,它就会抛出一个 ERROR Error: Uncaught (in promise): Response with status。当有像 200 这样的成功 http 代码时,该代码可以正常工作。这是我正在处理的 resolve 代码:
@Injectable()
export class LoginResolverService implements Resolve<Object> {
constructor(private http: Http) {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Object> | Promise<Object> | Object {
const headers = new Headers({'Content-Type': 'application/json'});
return this.http.get('http://localhost:3000/login_check', {headers: headers})
.map((response: Response) => {
return response.json();
}).catch((error: Response) => Observable.throw(error.json()));
}
}
组件文件代码:
loginState: Observable<Object>;
constructor(private route: ActivatedRoute, private router: Router) { }
ngOnInit() {
this.route.data.subscribe((data: Data) => {
this.loginState = data['isLoggedin'];
this.loginState.subscribe((response: any) => {
console.log(response);
}, (error: any) => {
console.log(error)
})
});
}
路线相关代码:
{path: 'notifications', loadChildren: './notifications/notifications.module#NotificationsModule', resolve: {isLoggedin: LoginResolverService}}
请帮我解决这个问题,因为我找不到任何有关使用 resolve 和 http 的正确信息
【问题讨论】:
-
看起来不错。你在哪里订阅?
-
@echonax 我无法订阅,因为我要返回一个对象
-
您正在返回一个 Observable,其响应是一个 Object。
this.http.get返回一个 observable -
@echonax 如果我尝试在组件文件中订阅它,我会收到
'subscribe' doesn't exist on type 'Object'的错误。这是我在组件文件中使用的代码this.route.data.subscribe((data: Data) => { this.loginState = data['isLoggedin']; this.loginState.subscribe((response: any) => { console.log(response); }, (error: any) => { console.log(error) }) }); -
这是一个打字检查问题。从方法返回类型中删除
| Object和| Promise<Object>部分。如果您要添加代码,请将其添加到您的问题中,请不要在评论部分中。
标签: javascript angular observable