Angular教程中的管道和水龙头方法是什么?[关闭]


128

我正在关注https://angular.io上的教程,但是在查找文档时遇到了麻烦;专为方法pipetap。我在https://angular.iohttp://reactivex.io/rxjs/上找不到任何内容。

我的理解是,pipetap有两种方法Observable,它正在从RxJS进口,是否正确?他们应该怎么办?

这些方法是Angular的一部分吗?这两种方法有什么作用?


55
当用户提出正确的问题,获得正确的答案时,我发现这很奇怪,但是由于mods毫无头绪,OP在问什么:D-为什么这是“题外话”呢?
Paul Strupeikis

Answers:


106

没错,文档缺少这些方法。但是,当我深入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运算符都是独立的函数,而不是Observable的方法,因此我们需要pipe()将这些运算符组成一个链(请参见上面的示例)。

点击:可以对观察到的数据产生副作用,但不会以任何方式修改流。以前叫do()。您可以认为它是可观察的,好像随着时间的推移是一个数组,那么tap()将等效于Array.forEach()


4
感谢您的回答和链接。问题的部分原因是我是Angular的新手,我不确定哪些方法是核心JavaScript或Node.js或RxJS或Angular的一部分。您的回答帮助我澄清了这一点。谢谢。
本·鲁宾

3
@BenRubin我建议您在开始学习工具之前先正确学习本机JS。它将使人们更容易理解工具及其实际功能(以及了解哪些部分是本机还是工具)。
Magnus Eriksson

20
从5.5开始,引入了可管道运算符(曾经称为lettable),do被重命名为tap...简而言之,这是一团糟。github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

3
filter就像Array.filter-仅保留满足规则的值(在这种情况下,被2整除);map(再次类似Array.map)更改每个值(在这种情况下,将其添加到自身);scan最有趣,这是一个很好的解释:learnerxjs.io/operators/transformation/scan.html
Daniel Kucal

1
看起来扫描减少了
latj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.