如何在 ngOnInit 上订阅两次?
Posted
技术标签:
【中文标题】如何在 ngOnInit 上订阅两次?【英文标题】:How can you subscribe twice on ngOnInit? 【发布时间】:2019-10-25 20:06:13 【问题描述】:我必须在 component.ts 中的 ngOnInit() 上订阅两次,但您似乎只能订阅一次。第二次订阅被忽略。
我该如何解决?
我对其进行了测试并更改了功能,并且总是第一个订阅有效,第二个订阅被忽略..
这只是一个伪代码,所以不要因为奇怪的命名而怀疑。
//service.service.ts
getUser(id: string)
return this.http.get(this.url)
getOrder()
return this.http.get(this.anotherUrl)
//component.ts
constructor(private service: Service)
public user: object;
public order: object;
public userID: string;
ngOnInit()
this.userID = this.route.snapshot.params['id'];
this.service.getUser(this.userID).subscribe(user => this.user = user );
this.service.getOrder().subscribe(order => this.order = order );
这行不通。只有第一个订阅有效,第二个将被忽略。
我能做些什么呢?怎么会是对的?
谢谢
【问题讨论】:
您可以订阅任意数量的内容。您是如何得出第二次订阅被忽略的结论的?那些是不相关的订阅,应该没有问题 如果我尝试控制台日志它什么都不会出现.. 嗯,你看到网络标签中的http调用了吗? 是的,第二次退出状态为 500(内部服务器错误),但调用本身是正确的并导致数据 那么这似乎是您的 API 中的一个问题 :) 【参考方案1】:您的要求并不清楚,您的示例代码并没有真正的帮助。
订阅接受错误处理回调作为第二个参数。 由于这似乎是 API 问题,您可以像这样捕获错误:
getData()
this.http.get(this.url).subscribe((result) =>
this.data = result;
console.log(this.data);
,
(errror: HttpErrorResponse) = >
// Error handling here
console.log(errror);
);
除此之外,还可以在 ngOnInit 中订阅多个 observable。
【讨论】:
以上是关于如何在 ngOnInit 上订阅两次?的主要内容,如果未能解决你的问题,请参考以下文章
Angular ngOnInit 如何将订阅结果用于另一个订阅/后端调用?