问题
我订阅了一个httpClient.get的可观察对象两次,但这意味着我的调用会执行两次。为什么会这样?
证明
每次我执行subscribe(),在登录页面上都会出现另一行。
代码(来自登录页面按钮的onSubmit())
var httpHeaders = new HttpHeaders()
.append("Authorization", 'Basic ' + btoa(this.username + ':' + this.password));
var observable = this.httpClient.get('api/version/secured', { headers: httpHeaders});
observable.subscribe(
() => {
console.log('First request completed');
},
(error: HttpErrorResponse) => {
console.log('First request error');
}
);
observable.subscribe(
() => {
console.log('Second request completed');
},
(error: HttpErrorResponse) => {
console.log('Second request error');
}
);
控制台
zone.js:2935 GET http://localhost:4200/api/version/secured 401 (Unauthorized)
login.component.ts:54 First request error
zone.js:2935 GET http://localhost:4200/api/version/secured 401 (Unauthorized)
login.component.ts:62 First request error
无关背景
我有一个处理所有登录功能的LogonService对象。它包含一个布尔变量,用于显示我是否已登录。每当我调用登录函数时,它会订阅httpClient.get的observable,以将登录变量设置为true或false。但是登录函数还返回observable,这个observable也被订阅了。花了我一些时间才将双重请求与双重订阅联系起来。如果有比通过变量跟踪登录更好的方法,请告诉我!我正在尝试学习angular :)