Angular $ q ทำงานอย่างไร


97

มีใครช่วยอธิบายหน่อยได้ไหมว่า$q.whenAngularJS ทำงานอย่างไร ฉันพยายามวิเคราะห์วิธีการ$httpทำงานและพบสิ่งนี้:

var promise = $q.when(config);

และนี่คือวัตถุกำหนดค่าจากคอนโซล Chrome:

Object {transformRequest: Array[1], transformResponse: Array[1], cache: Object, method: "GET", url: "/schedule/month_index.html"…}
cache: Object
headers: Object
method: "GET"
transformRequest: Array[1]
transformResponse: Array[1]
url: "/schedule/month_index.html"
__proto__: Object

จะเกิดอะไรขึ้นต่อไป? วัตถุนี้ได้รับการแก้ไขหรือปฏิเสธอย่างไร


$ q ใช้รูปแบบสัญญาเป็นเพียง wrapper ง่ายๆรอบ ๆ การโทรกลับใน javascript ดังนั้นเมื่อการโทรกลับประสบความสำเร็จสัญญาจะได้รับการแก้ไข
Ajay Beniwal

1
@Ajaybeniwal แต่ในกรณีนี้ออบเจ็กต์ส่งผ่านไม่โทรกลับ วิธีแก้ไข / ปฏิเสธในกรณีที่วัตถุผ่านไปไม่โทรกลับ?
SET

คำตอบ:


116

การโทร$q.whenใช้คำสัญญาหรือประเภทอื่น ๆ หากไม่ใช่คำสัญญาก็จะรวมไว้ในสัญญาและโทรแก้ไข หากคุณส่งค่าไปให้ค่านั้นจะไม่มีทางถูกปฏิเสธ

จากเอกสาร :

รวมออบเจ็กต์ที่อาจเป็นค่าหรือสัญญา (บุคคลที่สาม) ที่สามารถแล้วให้เป็นสัญญา $ q สิ่งนี้มีประโยชน์เมื่อคุณจัดการกับวัตถุที่อาจเป็นหรืออาจไม่ใช่คำสัญญาหรือหากคำสัญญานั้นมาจากแหล่งที่เชื่อถือไม่ได้


If you pass a value to it- แต่ถ้าฉันผ่านวัตถุล่ะ?
SET

11
ค่าวัตถุอาร์เรย์มันเหมือนกันทั้งหมด
Derek Ekins

3
จะเกิดอะไรขึ้นถ้าฉันส่งฟังก์ชันที่ส่งคืนคำสัญญา? หมายความว่าการเรียกกลับจากนั้นจะส่งผ่านผลลัพธ์ของสัญญาที่ส่งโดยการแก้ไขหรือไม่?
Onur Topal

3
Onur เมื่อคุณพูดว่า pass a function คุณหมายถึงเป็น function object: $q.when(myfunc)หรือโดยเรียกใช้ function ที่คุณส่งผ่าน: $q.when(myfunc())? ผมไม่ทราบว่าสิ่งที่อดีตจะทำ ... หลังจะเรียกmyfunc()ครั้งแรกและผ่านการกลับสัญญา | .when()มูลค่าให้กับ
jrista
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.