Как вы можете дважды подписаться на ngOnInit?

Мне нужно дважды подписаться на ngOnInit() в моем component.ts, но кажется, что вы можете подписаться только один раз. Вторая подписка игнорируется.

Как я могу это решить?

Я протестировал его и изменил функцию, и всегда первая подписка работает, вторая игнорируется.

Это просто фиктивный код, так что не удивляйтесь странному именованию.

//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 });
}

Это не сработает. Только первая подписка будет работать, а вторая будет проигнорирована.

Что я могу с этим поделать? Как это было бы правильно?

Спасибо


person Anna Marie    schedule 11.06.2019    source источник
comment
Вы можете подписаться на столько вещей, сколько хотите. Как вы пришли к выводу, что вторая подписка игнорируется? Это несвязанные подписки, проблем быть не должно   -  person Tim    schedule 11.06.2019
comment
Если я попытаюсь войти в консоль, ничего не появится.   -  person Anna Marie    schedule 11.06.2019
comment
Ну, вы видите, что http-вызовы выполняются на вкладке сети?   -  person Tim    schedule 11.06.2019
comment
да, второй выход со статусом 500 (внутренняя ошибка сервера) но сам вызов правильный и приводит к данным   -  person Anna Marie    schedule 11.06.2019
comment
Что ж, тогда это проблема в вашем API :)   -  person Tim    schedule 11.06.2019
comment
Но если я поменяю функцию, она работает, а другая больше нет :/. Мне нужно определить переменную this.id = this.route.snapshot.params['id']; ``` перед первой функцией. Это не будет проблемой, верно?   -  person Anna Marie    schedule 11.06.2019
comment
Поскольку вы не опубликовали много кода, я не могу вам помочь. Тем не менее, подписка принимает обратный вызов обработки ошибок в качестве второго аргумента. Таким образом, вы можете зарегистрировать ошибку и посмотреть, что пошло не так.   -  person Tim    schedule 11.06.2019
comment
Я обновляю код выше, один момент :). Не так много обновлений, но я использую идентификатор в this.url, чтобы получить одного пользователя, который отлично работает.   -  person Anna Marie    schedule 11.06.2019


Ответы (1)


Довольно неясно, о чем вы спрашиваете, и ваш пример кода на самом деле не помогает.

Subscribe принимает обратный вызов обработки ошибок в качестве второго аргумента. Поскольку это похоже на проблему 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.

person Tim    schedule 12.06.2019