Що таке трубопровідні методи у підручнику з кутом? [зачинено]


129

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

Я розумію, що pipeі tapчи обидва методи Observable, які імпортуються з RxJS, вірні? Що вони повинні робити?

Чи є ці методи частиною кутових? Що роблять ці два методи?


55
Мені здається дивним, коли користувачі задають належні запитання, отримують належну відповідь, і все ж для модників зрозуміло, про що задають ОП: D - чому, чорт, це "поза темою"?
Пол Струпейкіс

Відповіді:


107

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

  /**
   * 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 є окремою функцією, а не методом спостережуваного, нам потрібно pipe()створити ланцюжок цих операторів (див. Приклад вище).

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


4
Дякую за відповідь та посилання. Частина моєї проблеми полягає в тому, що я новачок у Angular, і я не впевнений, які методи входять до ядра JavaScript або Node.js або RxJS або Angular. Ваша відповідь допомогла мені прояснити це. Дякую.
Бен Рубін

3
@BenRubin Я б рекомендував розпочати з належного вивчення рідного JS, перш ніж почати вивчати інструменти. Це набагато полегшить розуміння інструментів і того, що він насправді робить (і знати, які частини є рідними порівняно з інструментом).
Магнус Ерікссон

20
починаючи з 5.5 та впроваджуючи трубопровідні оператори (колись їх називали допустимими) операторами, 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.