Что такое методы трубы и ответвления в учебнике по Angular? [закрыто]

131

Я следую руководству на https://angular.io , и у меня проблемы с поиском документации; специально для методов pipeи tap. Я ничего не могу найти на https://angular.io или http://reactivex.io/rxjs/ .

Я понимаю, что pipeи tapявляются оба метода Observable, который импортируется из RxJS, правильно? Что им делать?

Являются ли эти методы частью Angular? Что делают эти два метода?

Бен Рубин
источник
59
Мне кажется странным, когда пользователи задают правильные вопросы, получают правильный ответ, и все же для модов не знают, что спрашивает OP: D - какого черта это «не по теме»?
Пол Струпейкис

Ответы:

109

Вы правы, в документации этих методов нет. Однако , когда я копал в rxjs хранилище, я нашел хорошие комментарии о кране (слишком долго , чтобы вставить здесь) и трубные оператор:

  /**
   * Used to stitch together functional operators into a chain.
   * @method pipe
   * @return {Observable} the Observable result of all of the operators having
   * been called in the order they were passed in.
   *
   * @example
   *
   * import { map, filter, scan } from 'rxjs/operators';
   *
   * Rx.Observable.interval(1000)
   *   .pipe(
   *     filter(x => x % 2 === 0),
   *     map(x => x + x),
   *     scan((acc, x) => acc + x)
   *   )
   *   .subscribe(x => console.log(x))
   */

Вкратце:

Труба : используется для объединения функциональных операторов в цепочку. Раньше мы могли просто это сделать observable.filter().map().scan(), но поскольку каждый оператор RxJS является отдельной функцией, а не методом Observable, нам нужно pipe()создать цепочку этих операторов (см. Пример выше).

Нажатие : может вызывать побочные эффекты с наблюдаемыми данными, но никак не изменяет поток. Раньше назывался do(). Вы можете думать об этом так, как если бы наблюдаемый был массивом с течением времени, тогда он tap()был бы эквивалентом Array.forEach().

Даниэль Кучал
источник
4
Спасибо за ответ и ссылки. Частично моя проблема в том, что я новичок в Angular и не уверен, какие методы являются частью ядра JavaScript, Node.js, RxJS или Angular. Ваш ответ помог мне это прояснить. Спасибо.
Бен Рубин
3
@BenRubin Я бы порекомендовал вам начать с правильного изучения нативного JS, прежде чем приступать к изучению инструментов. Это значительно упростит понимание инструментов и того, что они на самом деле делают (а также узнать, какие части являются собственными по сравнению с инструментом).
Магнус Эрикссон
22
начиная с версии 5.5 и введены конвейерные (когда-то известные как lettable) операторы, doкоторые были переименованы в tap... Короче говоря, это беспорядок. github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
Лука,
3
filterработает аналогично Array.filter- сохраняет только значения, удовлетворяющие правилу (в данном случае делимые на 2); map(снова как Array.map) изменяет каждое значение (в данном случае добавляет его самому себе); scanнаиболее интересно, и вот хорошее объяснение: learnrxjs.io/operators/transformation/scan.html
Daniel Kucal
1
похоже, что сканирование сокращается
latj