Как получить данные из наблюдаемого потока - PullRequest
1 голос
/ 29 сентября 2019

Каков наилучший способ доступа к данным из наблюдаемого потока, когда мне нужен доступ к нему в угловом компоненте? Я знаю, что могу использовать асинхронный канал в шаблоне, но мне нужно получить доступ к данным в реальном компоненте.

До сих пор я извлекал данные в новую переменную с помощью касания или подписки, ноМне просто любопытно, упускаю ли я более простой или лаконичный способ сделать это. Если нет, есть ли предпочтительный метод между нажатием и подпиской?

//assume db.getBook() returns an observable with a book object
this.subscription = db.getBook("153").pipe(   
   tap(book => this.book = book).subscribe()

//or

this.subscription = db.getBook("153").subscribe(book => this.book = book)

1 Ответ

2 голосов
/ 29 сентября 2019

Метод .pipe используется для объединения наблюдаемых операторов, и вы всегда будете получать полученные данные. Кроме того, метод pipe позволяет веб-пакету удалять неиспользуемые операторы из окончательного пакета JavaScript. Это облегчает создание небольших файлов.

.tap прозрачно выполняет действия или побочные эффекты, такие как ведение журнала. Он не изменяет поток.

.subscribe будет вызываться только один раз и используется для подписки на наблюдаемый ответ. Более того, мы можем поместить ответ в некоторую переменную, чтобы отобразить его в виде.

Лучше использовать async pipe для шаблона:

<option *ngFor="let item of items$ | async">
     {{ item?.name }}
</option>

Для назначения данных из бэкэнда,Вы можете использовать subscribe() метод:

this.yourService.getYourData()
    .subscribe(val => 
       this.items = val
    );

Комментарий исходного кода метода tap() гласит:

Этот оператор полезен для отладкиваши Observables для правильных значений или выполнения других побочных эффектов.

Примечание: это отличается от subscribe на Observable. Если наблюдаемая, возвращаемая tap, не подписана, побочные эффекты, указанные наблюдателем, никогда не произойдут. tap поэтому просто следит за существующим исполнением, не запускает выполнение, как subscribe делает .

Так что лучше использовать метод subscribe дляназначайте данные, потому что:

  • Ваш окончательный комплект JavaScript будет более легким и не будет иметь tap method
  • Если Observable, возвращаемое tap, не подписано, побочные эффектыуказанный Наблюдателем никогда не произойдет. Так что в любом случае вам нужно вызвать метод subscribe. Поэтому нет необходимости использовать метод tap, если вы хотите просто назначить данные
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...