อะไรคือความแตกต่าง?
ดังที่คุณเห็นในตัวอย่างความแตกต่างหลักคือการปรับปรุงความสามารถในการอ่านซอร์สโค้ด มีเพียงสองฟังก์ชันในตัวอย่างของคุณ แต่ลองนึกดูว่ามีฟังก์ชันมากมายหรือไม่? แล้วมันจะเป็นอย่างไร
function1().function2().function3().function4()
มันดูน่าเกลียดและอ่านยากโดยเฉพาะอย่างยิ่งเมื่อคุณกรอกข้อมูลลงในฟังก์ชัน ยิ่งไปกว่านั้นตัวแก้ไขบางตัวเช่นโค้ด Visual Studio ไม่อนุญาตให้มีความยาวมากกว่า 140 บรรทัด แต่ถ้าเป็นไปตามนั้น
Observable.pipe(
function1(),
function2(),
function3(),
function4()
)
สิ่งนี้ช่วยเพิ่มความสามารถในการอ่านได้อย่างมาก
ถ้าไม่มีความแตกต่างทำไมท่อฟังก์ชันจึงมีอยู่?
จุดประสงค์ของฟังก์ชัน PIPE () คือการรวมตัวกันฟังก์ชันทั้งหมดที่ใช้และส่งกลับที่สังเกตได้ เริ่มต้นที่สังเกตได้จากนั้นสิ่งที่สังเกตได้จะถูกใช้ตลอดทั้งฟังก์ชัน pipe () โดยแต่ละฟังก์ชันที่ใช้ภายใน
ฟังก์ชันแรกรับสิ่งที่สังเกตได้ประมวลผลแก้ไขค่าและส่งผ่านไปยังฟังก์ชันถัดไปจากนั้นฟังก์ชันถัดไปจะนำเอาท์พุทที่สังเกตได้ของฟังก์ชันแรกประมวลผลและส่งผ่านไปยังฟังก์ชันถัดไปจากนั้นจะดำเนินการต่อไปจนกว่าฟังก์ชันทั้งหมด ภายในของฟังก์ชัน pipe () ใช้ที่สังเกตได้ในที่สุดคุณก็มีการประมวลผลที่สังเกตได้ ในตอนท้ายคุณสามารถเรียกใช้ฟังก์ชันที่สังเกตได้ด้วย subscribe () เพื่อดึงค่าออกมา โปรดจำไว้ว่าค่าที่สังเกตได้เดิมจะไม่มีการเปลี่ยนแปลง !!
ทำไมฟังก์ชันเหล่านั้นจึงต้องการการนำเข้าที่แตกต่างกัน?
การนำเข้าขึ้นอยู่กับว่าฟังก์ชันถูกระบุในแพ็คเกจ rxjs มันเป็นแบบนี้ โมดูลทั้งหมดจะถูกเก็บไว้ในโฟลเดอร์ node_modules ใน Angular นำเข้า {class} จาก "module";
ลองใช้รหัสต่อไปนี้เป็นตัวอย่าง ฉันเพิ่งเขียนมันใน stackblitz จึงไม่มีการสร้างขึ้นโดยอัตโนมัติหรือคัดลอกจากที่อื่น ฉันไม่เห็นจุดที่จะคัดลอกสิ่งที่ระบุไว้ในเอกสาร rxjs เมื่อคุณสามารถไปอ่านได้ด้วย ฉันถือว่าคุณถามคำถามนี้ที่นี่เนื่องจากคุณไม่เข้าใจเอกสาร
- มีไปป์ที่สังเกตได้ของคลาสแผนที่ที่นำเข้าจากโมดูลที่เกี่ยวข้อง
- ในเนื้อหาของคลาสฉันใช้ฟังก์ชัน Pipe () ตามที่เห็นในโค้ด
ฟังก์ชัน Of () จะส่งคืนค่าที่สังเกตได้ซึ่งจะแสดงตัวเลขตามลำดับเมื่อสมัครใช้งาน
ยังไม่ได้สมัครสมาชิก
เมื่อคุณใช้มันชอบ Observable.pipe () ฟังก์ชัน pipe () จะใช้ Observable ที่กำหนดเป็นอินพุต
ฟังก์ชันแรกฟังก์ชัน map () ใช้ Observable นั้นประมวลผลส่งคืน Observable ที่ประมวลผลแล้วกลับไปที่ฟังก์ชัน pipe ()
จากนั้น Observable ที่ประมวลผลแล้วจะถูกมอบให้กับฟังก์ชันถัดไปหากมี
และมันจะดำเนินต่อไปเช่นนั้นจนกว่าฟังก์ชันทั้งหมดจะประมวลผล Observable
ในตอนท้ายที่ Observable จะถูกส่งกลับโดยฟังก์ชัน pipe () ไปยังตัวแปรในตัวอย่างต่อไปนี้เป็น obs
ตอนนี้สิ่งที่อยู่ใน Observable คือตราบใดที่ผู้สังเกตการณ์ไม่ได้สมัครมันก็จะไม่ปล่อยคุณค่าใด ๆ ดังนั้นฉันจึงใช้ฟังก์ชัน subscribe () เพื่อสมัครสมาชิก Observable นี้จากนั้นทันทีที่ฉันสมัครสมาชิก ฟังก์ชัน of () เริ่มเปล่งค่าจากนั้นจะถูกประมวลผลผ่านฟังก์ชัน pipe () และคุณจะได้ผลลัพธ์สุดท้ายในตอนท้ายเช่น 1 นำมาจากฟังก์ชัน () ฟังก์ชัน 1 ถูกเพิ่ม 1 ในฟังก์ชัน map () และกลับมา คุณสามารถรับค่านั้นเป็นอาร์กิวเมนต์ภายในฟังก์ชันสมัครสมาชิก (ฟังก์ชัน ( อาร์กิวเมนต์ ) {})
หากคุณต้องการพิมพ์ให้ใช้เป็น
subscribe( function (argument) {
console.log(argument)
}
)
import { Component, OnInit } from '@angular/core';
import { pipe } from 'rxjs';
import { Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
obs = of(1,2,3).pipe(
map(x => x + 1),
);
constructor() { }
ngOnInit(){
this.obs.subscribe(value => console.log(value))
}
}
https://stackblitz.com/edit/angular-ivy-plifkg
pipe()
ปล่อยให้คุณผ่านผู้ประกอบการที่คุณสร้างหรือไม่?