มาพูดคุยกันว่าสัญญาคืออะไรและ $ Q คืออะไรก่อน สัญญาเป็นโหมดการประมวลผลแบบอะซิงโครนัสโดยมีวิธีการดำเนินการหลายอย่างเช่น Q Kris Kwal ที่มีชื่อเสียงของ Q และ JQuery's Deffered
สัญญาคืออะไร
ผู้ที่ได้เรียนรู้เกี่ยวกับอาแจ็กซ์มาก่อนจะได้สัมผัสกับความเจ็บปวดจากการโทรกลับ รหัสแบบซิงโครนัสนั้นง่ายต่อการดีบัก แต่รหัสการโทรกลับแบบอะซิงโครนัสจะทำให้นักพัฒนาตกอยู่ในหล่มและไม่สามารถติดตามได้เช่น::
funa (arg1, arg2, function () {funcb (arg1, arg2, function () {funcc (arg1, arg2, function () {xxxx ...... })})})})การทำรังของตัวเองนั้นยากที่จะเข้าใจและนอกจากนี้การโทรกลับจะถูกเรียกใช้ในเวลาที่ไม่รู้จักซึ่งเทียบเท่ากับการเพิ่มการดูถูกการบาดเจ็บ
อย่างไรก็ตามด้วยข้อกำหนดของสัญญาจะช่วยให้นักพัฒนาเขียนโค้ดแบบอะซิงโครนัสในแบบซิงโครนัสเช่นใน AngularJS:
deferabc.resolve (xxx)
.THEN (funcSuccess () {}, funCerror () {}, funcNotify () {});
เมื่อวัตถุในการแก้ไขดำเนินการสำเร็จ FuncSuccess จะถูกเรียกใช้และหากล้มเหลว FunCerror จะถูกเรียกใช้ คล้ายกันเล็กน้อย
deferabc.resolve (function () {sunccess: funcsuccess, ข้อผิดพลาด: funcerror, แจ้ง: funcnotify})ในการกล่าวอย่างตรงไปตรงมาสัญญาเป็นคำอธิบายล่วงหน้าของผลการดำเนินการที่ไม่แน่นอน หากประสบความสำเร็จมันจะเป็น xxxx; ถ้ามันล้มเหลวมันจะเป็น xxxx เช่นเดียวกับการให้สัญญาล่วงหน้า
ตัวอย่างเช่น Xiaobai ขี้เกียจมากเมื่อเขาอยู่ในโรงเรียน เขามักจะขอให้เพื่อนร่วมห้องของเขานำอาหารและบอกเขาล่วงหน้าว่าถ้ามีกระเทียมและไข่เขาจะซื้อผักนี้มิฉะนั้นเขาจะซื้อไข่ทอดกับมะเขือเทศ ไม่ว่าเขาจะซื้อได้เขาควรจำไว้ว่าจะนำบุหรี่มาหนึ่งแพ็ค
Xiaobai ขอให้เพื่อนร่วมห้องของเขานำอาหาร ()
. จากนั้น (ไข่หอม, ไข่กวนกับมะเขือเทศ)
. -finally (พร้อมแพ็คเกจบุหรี่)
บริการ $ Q
บริการ Q คือการดำเนินการตามสัญญาที่ดำเนินการโดยตัวเองใน AngularJS ซึ่งเบากว่า Kris Kwal's Q.
ก่อนอื่นให้แนะนำวิธีการที่ใช้กันทั่วไปหลายวิธีของ $ q:
เลื่อน () สร้างวัตถุรอการตัดบัญชีซึ่งสามารถดำเนินการวิธีการที่ใช้กันทั่วไปหลายวิธีเช่นการแก้ไขปฏิเสธการแจ้งเตือน ฯลฯ
ทั้งหมด () ผ่านในอาร์เรย์ของสัญญาดำเนินการในแบทช์และส่งคืนวัตถุสัญญา
เมื่อ () ผ่านในพารามิเตอร์ที่ไม่แน่นอนหากเป็นไปตามมาตรฐานสัญญาจะส่งคืนวัตถุสัญญา
ในสัญญามีการกำหนดสามรัฐ: รัฐรอสถานะความสำเร็จและสถานะการปฏิเสธ
มีกฎระเบียบหลายประการเกี่ยวกับสถานะ:
1 การเปลี่ยนแปลงในรัฐไม่สามารถย้อนกลับได้
2 สถานะการรอคอยอาจทำให้สมบูรณ์หรือถูกปฏิเสธ
วิธีการเลื่อน ()
ใน $ Q คุณสามารถใช้วิธีการแก้ไขเพื่อให้เป็นสถานะความสำเร็จ ใช้วิธีการปฏิเสธเพื่อเป็นสถานะการปฏิเสธ
มาดูการใช้งานง่าย ๆ ของ $ Q:
<html ng-app = "myapp"> <head> <meta http-equiv = "content-type" เนื้อหา = "text/html; charset = utf-8"/> <script src = "http://apps.bdimg.com/libs/angular.js/1.2.16/min.js ng-controller = "myctrl"> {{test}} </div> <script type = "text/javascript"> var myappmodule = angular.module ("myapp", []); MyAppModule.Controller ("Myctrl", ["$ scope", "$ q", ฟังก์ชั่น ($ scope, $ q) {$ scope.test = 1; // สิ่งนี้ใช้เพื่อทดสอบว่า angularjs เป็นปกติและไม่มีฟังก์ชันอื่น ๆ Promise1 --- ความสำเร็จ "); console.log (ค่า);}, ฟังก์ชัน (ค่า) {console.log (" ในสัญญา 1 --- ข้อผิดพลาด "); console.log (ค่า);}, ฟังก์ชัน (ค่า) {console.log (" ในสัญญา 1 --- ข้อผิดพลาด "); console.log (ค่า);}, ฟังก์ชัน (ค่า) {console.log ("ในสัญญา 1 --- แจ้ง"); console.log (ค่า); </script> </body> </html>ในกรณีที่ Delfer () ใช้เพื่อสร้างวัตถุที่รอการตัดบัญชีเลื่อนออกไปจะใช้เพื่อส่งคืนวัตถุสัญญาเพื่อกำหนดวิธีการนี้ มีพารามิเตอร์สามตัวในตอนนั้นคือการโทรกลับที่ประสบความสำเร็จการโทรกลับล้มเหลวและการเปลี่ยนแปลงสถานะการโทรกลับ
ตัวแปรหรือฟังก์ชั่นที่ส่งผ่านในการแก้ไขจะส่งคืนผลลัพธ์และจะถือเป็นพารามิเตอร์ของวิธีแรกจากนั้น จากนั้นวิธีการส่งคืนวัตถุสัญญาดังนั้นจึงสามารถเขียนได้
xxxx
. จากนั้น (A, B, C)
. จากนั้น (A, B, C)
. จากนั้น (A, B, C)
.จับ()
.ในที่สุด()
มาพูดถึงรหัสข้างต้นต่อไปแล้ว ... จับ ... ในที่สุดก็คิดว่ามันเป็นความพยายาม ... จับ ... ในที่สุดก็อยู่ใน Java
ทั้งหมด () วิธีการ
วิธีการทั้งหมด () นี้สามารถรวมพริทจ์หลายตัวเข้าด้วยกันเป็นหนึ่งเดียว เมื่อสัญญาทั้งหมดดำเนินการสำเร็จการโทรกลับที่ตามมาจะถูกดำเนินการ พารามิเตอร์ในการโทรกลับเป็นผลมาจากการดำเนินการตามสัญญาแต่ละครั้ง
วิธีนี้สามารถใช้งานได้เมื่อมีการดำเนินการบางวิธีในแบทช์
var funca = function () {console.log ("funca"); กลับ "สวัสดี funa"; } var funcb = function () {console.log ("funcb"); กลับ "สวัสดี funb"; } $ q.all ([funca (), funcb ()]). จากนั้น (ฟังก์ชั่น (ผลลัพธ์) {console.log (ผลลัพธ์);});ผลลัพธ์ของการดำเนินการ:
ฟาง
funcb
Array ["Hello, Funa", "Hello, Funb"]
เมื่อ () วิธีการ
เมื่อวิธีการสามารถส่งผ่านพารามิเตอร์ซึ่งอาจเป็นค่าและอาจเป็นวัตถุภายนอกที่สอดคล้องกับมาตรฐานสัญญา
var funca = function () {console.log ("funca"); กลับ "สวัสดี funa"; } $ q.when (funca ()). จากนั้น (ฟังก์ชั่น (ผลลัพธ์) {console.log (ผลลัพธ์);});วิธีนี้สามารถใช้ได้เมื่อพารามิเตอร์ที่ผ่านไม่แน่นอน
สวัสดี Funa
ข้างต้นเป็นการแนะนำรายละเอียดเกี่ยวกับข้อมูลเกี่ยวกับสัญญา --- $ Q บริการใน AngularJS เราจะยังคงเพิ่มข้อมูลที่เกี่ยวข้องในอนาคต ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!