วิธีการท่อและการแตะในบทช่วยสอนเชิงมุมคืออะไร? [ปิด]


130

ฉันกำลังติดตามบทแนะนำที่https://angular.ioและมีปัญหาในการค้นหาเอกสาร โดยเฉพาะสำหรับวิธีการpipeและtap. ฉันไม่สามารถหาอะไรในhttps://angular.ioหรือhttp://reactivex.io/rxjs/

ความเข้าใจของฉันคือสิ่งนั้นpipeและtapเป็นทั้งสองวิธีObservableที่นำเข้าจาก RxJS ถูกต้องหรือไม่? พวกเขาควรจะทำอย่างไร?

วิธีการเหล่านี้เป็นส่วนหนึ่งของ Angular หรือไม่? สองวิธีนี้ใช้ทำอะไร?


58
ฉันคิดว่ามันแปลกเมื่อผู้ใช้ถามคำถามที่ถูกต้องได้รับคำตอบที่ถูกต้อง แต่สำหรับ mod นั้นก็ไม่รู้ว่า OP กำลังถามอะไรอยู่: D - ทำไมนรกถึงเป็น "นอกประเด็น"?
Paul Strupeikis

คำตอบ:


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 คำตอบของคุณช่วยให้ฉันกระจ่างขึ้น ขอบคุณ.
Ben Rubin

3
@BenRubin ฉันขอแนะนำให้คุณเริ่มต้นด้วยการเรียนรู้ภาษาพื้นเมืองอย่างถูกต้องก่อนที่จะเริ่มเรียนรู้เครื่องมือ มันจะทำให้ง่ายขึ้นมากในการทำความเข้าใจเครื่องมือและสิ่งที่มันทำจริง (และรู้ว่าส่วนใดเป็นของเนทีฟเทียบกับเครื่องมือ)
Magnus Eriksson

21
ตั้งแต่ 5.5 และการแนะนำตัวดำเนินการ pipeable (ซึ่งเคยเรียกว่า lettable) doตามที่ได้รับการเปลี่ยนชื่อเป็นtap... ในระยะสั้นมันเป็นระเบียบ github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
Luca

3
filterทำงานเหมือนArray.filter- เก็บเฉพาะค่าที่ตอบสนองกฎ (ในกรณีนี้หารด้วย 2) map(เหมือนอีกครั้งArray.map) เปลี่ยนทุกค่า (ในกรณีนี้จะเพิ่มให้ตัวเอง); scanน่าสนใจที่สุดและนี่คือคำอธิบายที่ดี: learnrxjs.io/operators/transformation/scan.html
Daniel Kucal

1
ดูเหมือนว่าการสแกนจะลดลง
latj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.