ฉันควรใช้เมธอด“ then” ของ jQuery deferred เมื่อไรและควรใช้เมธอด“ pipe” เมื่อใด
jQuery Deferredมีสองฟังก์ชั่นที่สามารถใช้เพื่อปรับใช้ฟังก์ชัน Chaining แบบอะซิงโครนัส: then() deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred doneCallbacksฟังก์ชันหรืออาร์เรย์ของฟังก์ชันที่เรียกเมื่อ Deferred ได้รับการแก้ไข failCallbacksฟังก์ชันหรืออาร์เรย์ของฟังก์ชันที่เรียกว่าเมื่อ Deferred ถูกปฏิเสธ pipe() deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise doneFilterฟังก์ชันทางเลือกที่ถูกเรียกใช้เมื่อ Deferred ได้รับการแก้ไข failFilterฟังก์ชันทางเลือกที่ถูกเรียกใช้เมื่อ Deferred ถูกปฏิเสธ ฉันรู้ว่าthen()ใช้เวลานานกว่าเล็กน้อยpipe()ดังนั้นอย่างหลังจึงต้องเพิ่มผลประโยชน์พิเศษบางอย่าง แต่สิ่งที่แตกต่างอย่างชัดเจนก็ทำให้ฉันหายไป ทั้งสองใช้พารามิเตอร์การเรียกกลับที่เหมือนกันแม้ว่าจะแตกต่างกันในชื่อและความแตกต่างระหว่างการส่งคืน a Deferredและส่งคืนPromiseดูเหมือนเล็กน้อย ฉันอ่านเอกสารอย่างเป็นทางการซ้ำแล้วซ้ำเล่า แต่มักจะพบว่ามัน "หนาแน่น" เกินไปที่จะคาดคั้นเอาไว้และการค้นหาก็พบว่ามีการอภิปรายเกี่ยวกับคุณลักษณะหนึ่งหรืออย่างอื่นมากมาย แต่ฉันไม่พบสิ่งใดที่ให้ความกระจ่างในความแตกต่าง ข้อดีข้อเสียของแต่ละข้อ ดังนั้นควรใช้thenเมื่อใดและควรใช้เมื่อpipeใด ส่วนที่เพิ่มเข้าไป คำตอบที่ยอดเยี่ยมของเฟลิกซ์ช่วยชี้แจงว่าฟังก์ชันทั้งสองนี้แตกต่างกันอย่างไร แต่ฉันสงสัยว่ามีบางครั้งที่การทำงานthen()ของpipe(). เห็นได้ชัดว่าpipe()มีพลังมากกว่าthen()และดูเหมือนว่าอดีตสามารถทำอะไรก็ได้ที่คนหลังทำได้ เหตุผลหนึ่งที่ต้องใช้then()อาจเป็นเพราะชื่อนี้สะท้อนให้เห็นถึงบทบาทของมันในขณะที่การสิ้นสุดของสายการทำงานที่ประมวลผลข้อมูลเดียวกัน แต่มีกรณีการใช้งานที่ต้องthen()ส่งคืนต้นฉบับDeferredที่ไม่สามารถทำได้pipe()เนื่องจากส่งคืนใหม่Promiseหรือไม่?