Угловой канал объединения HttpClient, коснитесь с подпиской?

Я пытаюсь получить некоторые данные с помощью HttpClient в Angular. Мой код выглядит следующим образом:

getData(suffurl: string, id?:number): Observable<any[]> {
    return this.http.get<any[]>('localhost:5555/DNZ/'+ this.suff_url)
    .pipe(
      tap(data => console.log("Anlagenstatus Daten:", data)),
      catchError(this.handleError('getData',[])),
      subscribe(Response => { console.log(Response)})
    )
  }

Однако я не могу использовать subscribe в методе pipe или связать его до или после метода .pipe. Проблема в том, что без подписки кажется, что этот код не возвращает никаких данных с URL-адреса и не регистрирует что-либо в консоли, хотя ссылка и данные существуют?


person ChillaBee    schedule 06.07.2018    source источник
comment
Услуга НЕ должна подписываться. абонент этой службы должен. https://angular.io/guide/http И почему, ну почему вы используете any? Было бы неплохо узнать, что на самом деле содержит массив?   -  person JB Nizet    schedule 06.07.2018
comment
на самом деле, у меня есть эта служба в моем компоненте в качестве метода, поэтому вызывающий на самом деле является тем, кто подписывается ... но я сделал это сейчас в NgOnInit () ...   -  person ChillaBee    schedule 06.07.2018
comment
Что ж, не делай этого. Поместите свой код доступа к данным в сервисе. https://angular.io/guide/http   -  person JB Nizet    schedule 06.07.2018
comment
+1 Всегда сообщайте вызывающему абоненту об асинхронности, насколько можете, и используйте ее там! Не по теме: О боже, кажется, каждый раз, когда я отвечаю на один из этих async Promise Observable или http.request вопросов, всплывает другой. Остановите кровотечение! Спасайтесь!   -  person mittens pair    schedule 06.07.2018


Ответы (1)


Вы должны подписаться на метод (поскольку он возвращает Observable), а не внутри канала.

Попробуйте вместо этого

getData(suffurl: string, id?:number): Observable<any[]> {
    return this.http.get<any[]>('localhost:5555/DNZ/'+ this.suff_url)
    .pipe(
      tap(data => console.log("Anlagenstatus Daten:", data)),
      catchError(this.handleError('getData',[])),
    )
  }

затем позвони

this.getData("url").subscribe(Response => { console.log(Response)})
person John    schedule 06.07.2018
comment
Хорошо, спасибо, это решило мою проблему, теперь у меня есть данные в ответе, что бы я делал сейчас, когда хотел бы выполнить обработку данных, например, .map () функции? Могу ли я связать карту функций в любом месте до или после подписки? А во-вторых, почему я не могу подписаться сразу после метода, это было в случае со старой библиотекой Http, вы использовали ее, выполнив запрос get, за которым следует метод .subscribe ... Мне просто интересно, почему они сделали это иначе на этот раз с новым HttpClient ..? - person ChillaBee; 06.07.2018
comment
Если я правильно понимаю, вы можете использовать карту внутри канала следующим образом: .pipe( map(data => { return doSomeLogic;})). Взгляните на этот вопрос: stackoverflow.com/questions/47275385/ Я не уверен, что понимаю второй вопрос о подписке напрямую. Вы можете подписаться прямо в вашей функции getData (), используя .pipe (). Subscribe (). Однако тогда вы вернете Subscription, а не Observable. надеюсь, это поможет - person John; 06.07.2018