【发布时间】:2017-07-24 14:35:37
【问题描述】:
我是 rxjs 的初学者,目前在调用 subscribe 函数时遇到问题。我的代码是这样的:
组件 A:
getAllData() {
this.dataService.getDataA().subscribe(
data => console.log(data))
}
数据服务:
getDataA() {
let url = "/services/data";
return this.getData(url)
}
getData() {
//first without JWT
let sub = new Subject<Response>();
this.http.get(param1)
.subscribe(
res => sub.next(res)
err => {
//401 without JWT so I call authService
this.authServ.getDataWithToken().subscribe(
data => sub.next(data)
)}
return sub.asObservable()
}
getData2() {
//first without JWT
let sub = new Subject<Response>();
this.http.get(param1)
.subscribe(
res => sub.next(res)
err => {
//401 without JWT so I call authService
this.authServ.getDataWithToken().subscribe(
data => sub.next(data)
)}
return sub.asObservable()
}
身份验证服务:
getDataWithToken() {
let sub = new Subject<Response>()
this.getToken().subscribe(
token=> {
//reachable just once
this.http.get(url, new RequestOption(tokenHeader))
.subscribe(
data => sub.next(data)
)
return sub.asObservable();
}
getToken(url) {
let sub = new Subject<string>();
if (this.tokens[url])
// token is already in memory - console log proves it's reachable
sub.next(this.tokens[url])
else {
// also reachable
this.http.get(newToken).subscribe(
(data) => sub.next(data))
return sub.asObservable()
}
问题是,当我尝试使用令牌到达两个重新端点 -> 进入身份验证服务时,只有第一个正常工作,第二个卡在 authService.getDataWithToken.subscribe 中,它似乎正在等待数据但什么都没有发生。我找到了一种解决方法(真的很脏),如果我在服务中复制函数 getData 并从一个组件中调用 getData 并从另一个组件中调用 getData2,它就可以工作。
我知道,有更多订阅,这可能是问题所在。但是有人能解释一下为什么会这样吗?
【问题讨论】:
-
请更新并整理您的代码。很难看到发生了什么——特别是因为它不是有效的 JS,所以人们需要猜测什么是正确的。有关如何执行此操作的帮助:stackoverflow.com/help/mcve
-
我更新了我的代码。不幸的是,我无法提供有关代码的更多详细信息。但是这个伪代码完全模拟了我的情况
-
Psuedocode 对我们来说很难诊断出您的问题所在 - 您可以创建一个 plunker 示例来演示问题吗? here is a template to get started
标签: angular rxjs jwt angular2-services