В чем смысл .pipe (map ())

Я просто смотрю на этот пример https://github.com/arjunyel/angular-apollo-example/blob/master/frontend/src/app/app.component.ts#L28

У него такой код:

 this.tweets = this.tweetsGQL
      .watch()
      .valueChanges.pipe(map(tweets => tweets.data));

Просто интересно, как this.tweets получает присвоенное значение? Это как-то связано с .pipe(map()), не могли бы вы рассказать об этом подробнее?

.pipe(map(() используется для преобразования значения, испускаемого наблюдаемым, поэтому вместо того, чтобы испускать объект tweets, он испускает tweets.data. Переменная this.tweets содержит Observable, а не фактические данные.
user184994 08.10.2018 08:39

Значение не будет присвоено напрямую this.tweets. Вам нужно будет записать subscribe в this.tweets, чтобы получить данные о твитах. Все, что делает .pipe(map()), - это трансформирует фактические данные, которые вы получаете от API, и возвращает его свойство data.

SiddAjmera 08.10.2018 08:39
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
5
2
2 493
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как говорили другие, this.tweets хранит только наблюдаемые, а не фактические данные, вы должны подписаться на наблюдаемые, чтобы получить фактические данные.

.pipe(map(tweets => tweets.data)) 

Это короткая рука .pipe(map(tweets => { return tweets.data})). Таким образом, он неявно возвращает tweets.data в качестве наблюдаемого в this.tweets.

Ответ принят как подходящий

В angular для отображения данных в * ng мы можем использовать два подхода:

Показать наблюдаемое с помощью async. обычно мы используем соглашение, согласно которому наблюдаемая переменная начинается с $

<div *ngFor = "let tweet of ($tweets | async)?.tweets">
  ....
</div>
//In this case we use
this.$tweets=this.tweetsGQL
      .watch()
      .valueChanges.pipe(map(res=> res.data));

Показать массив

<div *ngFor = "let tweet of tweets.tweets">
  ....
</div>
//In this case we must subscribe -and not equal the observable to anything
this.tweetsGQL
      .watch()
      .valueChanges.pipe(map(res=> res.data))
      .subscribe(res=>this.tweets=res);

О "карте (tweets => twees.data)". Наблюдаемое может возвращать что угодно. В этом случае верните объект вроде

{data:tweets:[....],otherProperty:value}

Мы можем отобразить (преобразовать) ответ, чтобы наблюдаемое возвращало только данные «свойства». Не весь объект

map(res=>res.data)
//the for must be over tweets.tweets *ngFor = "let tweet of tweets.tweets"

даже мы можем сопоставить ответ так, чтобы наблюдаемые возвращаемые данные. твиты

map(res=>res.data.tweets)
//the for must be over tweets *ngFor = "let tweet of tweets"

ПРИМЕЧАНИЕ: я изменяю ответ, используя переменную "res", чтобы избежать недоразумений.

Другие вопросы по теме