【问题标题】:How can you subscribe twice on ngOnInit?如何在 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 中的一个问题 :)

标签: typescript angular7 subscription ngoninit


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-31
    • 2019-11-14
    • 1970-01-01
    • 2017-05-13
    • 2018-06-12
    • 1970-01-01
    • 2019-01-25
    • 2020-02-12
    相关资源
    最近更新 更多