【发布时间】:2018-08-18 21:32:57
【问题描述】:
问题
我订阅了一个 httpClient.get observable 两次。但是,这意味着我的调用被执行了两次。这是为什么呢?
证明
对于我执行的每一个 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 对象来处理我的所有登录功能。它包含一个布尔变量,显示我是否登录。每当我调用 login 函数时,它都会订阅 httpClient.get 的 observable,以将 login 变量设置为 true 或 false。但是 login 函数也返回被订阅的 observable。我花了一些时间将双重请求链接到双重订阅。如果有比通过变量更好的方法来跟踪登录,请告诉我!我正在尝试学习角度:)
【问题讨论】:
-
这就是普通的 observables 的工作方式。如果您希望在代码执行一次时通知许多订阅者,则需要使用主题reactivex.io/rxjs/manual/overview.html#subject