JavaScript Promise.race() วิธีการ

Javascript Promise Race Withi Kar



Promise.race() เป็นวิธีการในตัวของ JavaScript ซึ่งใช้คำสัญญาแบบวนซ้ำเป็นอาร์กิวเมนต์และส่งกลับคำสัญญาแรกที่ได้รับการแก้ไขหรือปฏิเสธ วิธี Promise.race() จะคืนค่าการปฏิบัติตามหรือเหตุผลในการปฏิเสธ Iterables เป็นวัตถุที่สามารถวนซ้ำได้เช่น Arrays, Strings และ Maps

สัญญาคืออะไร?

รหัสแบบอะซิงโครนัสสามารถจัดการกับสัญญาได้ พวกเขาใช้ฟังก์ชันที่เรียกว่าตัวดำเนินการเป็นพารามิเตอร์ เมื่อมีการสร้างคำสัญญา ผู้ดำเนินการจะรันแบบอะซิงโครนัสโดยอัตโนมัติและส่งกลับค่าในกรณีที่มีการปฏิบัติตามมิฉะนั้นจะส่งกลับสาเหตุของการปฏิเสธ:

ให้ example_promise = ใหม่สัญญา ( ( แก้, ปฏิเสธ ) => {
แก้ไข ( “สัญญาได้รับการแก้ไขแล้ว” ) ;
} ) ;

ตัวอย่าง_promise แล้ว ( r => คอนโซล บันทึก ( r ) ) ;







ลักษณะสัญญาแบบอะซิงโครนัส:



ให้ example_promise = ใหม่สัญญา ( ( แก้, ปฏิเสธ ) => {
แก้ไข ( “สัญญาได้รับการแก้ไขแล้ว” ) ;
} ) ;

ตัวอย่าง_promise แล้ว ( r => คอนโซล บันทึก ( r ) ) ;
คอนโซล บันทึก ( '1,2,3...' ) ;



จะใช้วิธี Promise.race () ได้อย่างไร?

ส่งผ่าน iterable of promises ไปยัง Promise.race() และรับค่าส่งคืนในตัวแปร:





ให้พรหม1 = ใหม่สัญญา ( ( แก้, ปฏิเสธ ) => {
setTimeout ( ( ) => แก้ไข ( “สัญญาได้รับการแก้ไขแล้ว” ) , 500 ) ;
} ) ;

ให้ prom2 = ใหม่สัญญา ( ( แก้, ปฏิเสธ ) => {
setTimeout ( ( ) => ปฏิเสธ ( “สัญญาไม่สามารถแก้ไขได้” ) , 250 ) ;
} ) ;

ปล่อยให้อุณหภูมิ = สัญญา. แข่ง ( [ งานพรอม1 งานพรอม2 ] ) ;

อุณหภูมิ จับ ( เหตุผล => คอนโซล บันทึก ( เหตุผล ) ) ;

ในตัวอย่างนี้ เรามีสัญญาสองประการ สัญญาแรกได้รับการแก้ไขหลังจาก 500 มิลลิวินาที และสัญญาที่สองถูกปฏิเสธหลังจากผ่านไป 250 วินาที เนื่องจากสัญญาฉบับที่สองเป็นสัญญาแรกที่ได้รับการแก้ไขหรือปฏิเสธสัญญาฉบับที่สองจึงถูกส่งกลับโดยวิธี Promise.race()



หากอาร์กิวเมนต์ที่ส่งผ่านไปยัง Promise.race() เป็นการทำซ้ำที่ว่างเปล่า เมธอดจะส่งคืนสัญญาที่รอดำเนินการตลอดไป:

ปล่อยให้อุณหภูมิ = สัญญา. แข่ง ( [ ] ) ;

คอนโซล บันทึก ( อุณหภูมิ ) ;

หากอาร์กิวเมนต์ iterable มีค่าหรือสัญญาที่ไม่เป็นไปตามสัญญาซึ่งได้ปฏิบัติตามหรือปฏิเสธแล้ว วิธีการจะชำระเป็นค่าแรกในอาร์เรย์:

ให้ p1 = ใหม่สัญญา ( ( แก้, ปฏิเสธ ) => {
แก้ไข ( 'P1 ได้รับการแก้ไข' ) ;
} ) ;

ให้ p2 = ใหม่สัญญา ( ( แก้, ปฏิเสธ ) => {
แก้ไข ( 'P2 ได้รับการแก้ไขแล้ว' ) ;
} ) ;

ปล่อยให้อุณหภูมิ = สัญญา. แข่ง ( [ p1,p2 ] ) ;
อุณหภูมิ แล้ว ( ค่า => คอนโซล บันทึก ( ค่า ) ) ;

Promise.race() วิธีการตรวจสอบทั้งสัญญาที่แก้ไขแล้วและถูกปฏิเสธ วิธีการนี้ยังมีอีกทางเลือกหนึ่งคือ Promise.any() ซึ่งสามารถใช้เพื่อตรวจสอบคำสัญญาที่สำเร็จ

บทสรุป

Promise.race() ใช้เพื่อรับสัญญาแรกที่สำเร็จหรือถูกปฏิเสธจากคำสัญญาที่ทำซ้ำได้ คำมั่นสัญญาที่สำเร็จหรือถูกปฏิเสธอย่างเร็วที่สุดคือค่าส่งคืนของ Promise.race() บทความนี้ให้ข้อมูลเชิงลึกเกี่ยวกับวิธี Promise.race()