Apa itu metode pipa dan ketuk dalam tutorial Angular? [Tutup]

130

Saya mengikuti tutorial di https://angular.io , dan saya kesulitan menemukan dokumentasi; khusus untuk metode pipedan tap. Saya tidak dapat menemukan apa pun di https://angular.io atau http://reactivex.io/rxjs/ .

Pemahaman saya adalah itu pipedan tapkeduanya metode Observable, yang diimpor dari RxJS, benar? apa yang seharusnya mereka lakukan?

Apakah metode ini bagian dari Angular? Apa yang dilakukan kedua metode ini?

Ben Rubin
sumber
57
Saya merasa aneh ketika pengguna mengajukan pertanyaan yang tepat, menerima jawaban yang tepat, namun untuk mod tidak mengerti apa yang ditanyakan OP: D - mengapa ini "di luar topik"?
Paul Strupeikis

Jawaban:

109

Anda benar, dokumentasi tidak memiliki metode tersebut. Namun ketika saya menggali ke dalam repositori rxjs, saya menemukan komentar bagus tentang tap (terlalu panjang untuk ditempel di sini) dan operator pipa :

  /**
   * 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))
   */

Secara singkat:

Pipa : Digunakan untuk menjahit operator fungsional menjadi sebuah rantai. Sebelumnya kita bisa melakukannya observable.filter().map().scan(), tetapi karena setiap operator RxJS adalah fungsi mandiri daripada metode Observable, kita perlu pipe()membuat rantai operator tersebut (lihat contoh di atas).

Ketuk : Dapat melakukan efek samping dengan data yang diamati tetapi tidak mengubah aliran dengan cara apa pun. Sebelumnya disebut do(). Anda dapat menganggapnya seolah-olah observable adalah array dari waktu ke waktu, maka tap()akan menjadi setara dengan Array.forEach().

Daniel Kucal
sumber
4
Terima kasih atas jawabannya dan tautannya. Bagian dari masalah saya adalah saya baru mengenal Angular, dan saya tidak yakin metode mana yang merupakan bagian dari inti JavaScript atau Node.js atau RxJS atau Angular. Jawaban Anda membantu saya mengklarifikasi itu. Terima kasih.
Ben Rubin
3
@BenRubin Saya akan merekomendasikan agar Anda mulai dengan mempelajari JS asli dengan benar sebelum mulai mempelajari alat. Ini akan membuatnya lebih mudah untuk memahami alat dan apa yang sebenarnya dilakukannya (dan untuk mengetahui bagian mana yang asli vs alat).
Magnus Eriksson
21
sejak 5.5 dan pengenalan operator yang dapat disambung (dulu dikenal sebagai lettable), yang dotelah diubah namanya menjadi tap... Singkatnya, ini berantakan. github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
Luca
3
filterbekerja seperti Array.filter- hanya menyimpan nilai yang memenuhi aturan (dalam hal ini habis dibagi 2); map(sekali lagi seperti Array.map) mengubah setiap nilai (dalam hal ini menambahkannya ke nilai itu sendiri); scanadalah yang paling menarik dan inilah penjelasan yang bagus: learnrxjs.io/operators/transformation/scan.html
Daniel Kucal
1
Sepertinya pemindaian berkurang
latj