دعونا نتحدث عن الوعد وما هو $ Q أولاً. Promise هو وضع معالجة غير متزامن ، مع العديد من طرق التنفيذ ، مثل Deffered Kris Kwal's Q و JQuery الشهيرة.
ما هو الوعد
أولئك الذين تعلموا عن أياكس من قبل يمكنهم تجربة ألم عمليات الاسترجاعات. من السهل تصحيح الرمز المتزامن ، لكن رمز رد الاتصال غير المتزامن سيؤدي إلى سقوط المطورين في مستنقع ولا يمكن تتبعه ، مثل:
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 ، error: funcerror ، إخطار: funcnotify})بعبارة صريحة ، يعد الوعد بمثابة تعريف مسبق لنتائج التنفيذ غير المؤكدة. إذا نجحت ، فسيكون xxxx ؛ إذا فشلت ، فسيكون xxxx ، تمامًا مثل إعطاء بعض الوعود مقدمًا.
على سبيل المثال ، كان Xiaobai كسولًا جدًا عندما كان في المدرسة. كان يطلب دائمًا من زميله في الغرفة إحضار الطعام وأخبره مقدمًا أنه إذا كان هناك الكثير من الكراث والبيض ، فسيشتري هذه الخضروات ، وإلا فإنه سيشتري البيض المقلي مع الطماطم ؛ بغض النظر عما إذا كان بإمكانه شرائها ، يجب أن يتذكر إحضار مجموعة من السجائر.
طلب Xiaobai من زميله في الغرفة إحضار الوجبات ()
ثم (بيض الكراث ، بيض مخفوق مع الطماطم)
.
$ Q Service
خدمة Q هي تنفيذ وعد ينفذ من تلقاء نفسه في AngularJS ، وهو أخف بكثير من Kris Kwal's Q.
اسمحوا لي أولاً أن أقدم عدة طرق شائعة الاستخدام لـ $ س:
ينشئ التأجيل () كائنًا مؤجلًا ، والذي يمكنه تنفيذ العديد من الطرق الشائعة الاستخدام ، مثل حل ، ورفض ، وإخطار ، وما إلى ذلك.
كل () يمر في مجموعة من الوعود ، ينفذ على دفعات ، ويعيد كائن الوعد
عندما () يمر في معلمة غير مؤكدة ، إذا كان يفي بمعيار الوعد ، فإنه يعيد كائن الوعد.
في الوعد ، يتم تعريف ثلاث ولايات: حالة الانتظار ، دولة الانتهاء ، ودولة الرفض.
هناك العديد من اللوائح المتعلقة بالحالة:
1 التغييرات في الدولة لا رجعة فيها
2 يمكن أن تصبح حالة الانتظار كاملة أو مرفوضة
تأجيل () طريقة
في $ Q ، يمكنك استخدام طريقة حل لتصبح حالة الانتهاء ؛ استخدم طريقة الرفض لتصبح حالة الرفض.
لنلقي نظرة على الاستخدام البسيط لـ $ س:
<html ng-app = "myapp"> <head> <meta http-equiv = "content-type" content = "text/html ؛ charset = utf-8"/> <script src = "http://app.bdimg.com/libs/angular.js/1.2.16/angular <div ng-controller = "myctrl"> {{test}} </div> <script type = "text/javaScript"> var myappmodule = Angular.Module ("MyApp" ، []) ؛ myappmodule.controller ("myctrl" ، ["$ scope" ، "$ q" ، function ($ scope ، $ q) {$ scope.test = 1 ؛ Promise1 --- النجاح ") ؛ console.log (value) ؛} ، الدالة (القيمة) {console.log (" في الوعد 1 --- خطأ ") ؛ console.log (value) ؛} ، الوظيفة (القيمة) {console.log (" in promise1 --- error ") ؛ console.log (value) ؛ console.log (value) ؛ console.log (القيمة) ؛ </script> </body> </html>عندما يتم استخدام مؤشر () لإنشاء كائن مؤجل ، يتم استخدام refer.promise لإرجاع كائن الوعد لتحديد الطريقة ثم. هناك ثلاثة معلمات في ذلك الوقت ، وهي رد الاتصال الناجح ، والاستدعاء الفاشل ، وإجراء رد الاتصال على الحالة.
سيعود المتغير أو الوظيفة التي تم تمريرها في حل النتيجة وسيُعتبر معلمة الطريقة الأولى ثم. ثم تقوم الطريقة بإرجاع كائن الوعد ، بحيث يمكن كتابته باسم
xxxx
ثم (أ ، ب ، ج)
ثم (أ ، ب ، ج)
ثم (أ ، ب ، ج)
.يمسك()
.أخيراً()
دعنا نستمر في الحديث عن الكود أعلاه ، ثم ... التقاط ... أخيرًا فكر في الأمر على أنه المحاولة ... التقاط ... أخيرًا في جافا.
كل () طريقة
هذه الطريقة كل () يمكن أن تجمع بين الأوائل المتعددة في واحدة. عندما يتم تنفيذ جميع الوعود بنجاح ، سيتم تنفيذ رد الاتصال اللاحق. المعلمات في رد الاتصال هي نتيجة كل تنفيذ وعد.
يمكن استخدام هذه الطريقة عند تنفيذ بعض الطرق على دفعات.
var funca = function () {console.log ("funca") ؛ العودة "مرحبا ، funa" ؛ } var funcb = function () {console.log ("funcb") ؛ العودة "مرحبا ، funb" ؛ } $ q.all ([funca () ، funcb ()]) .Then (function (result) {console.log (result) ؛}) ؛نتائج التنفيذ:
Funca
funcb
Array ["Hello ، Funa" ، "Hello ، funb"]
عندما () الطريقة
عندما يمكن تمرير الطريقة معلمة ، والتي قد تكون قيمة ، وقد تكون كائنًا خارجيًا يتوافق مع معيار الوعد.
var funca = function () {console.log ("funca") ؛ العودة "مرحبا ، funa" ؛ } $ q. when (funca ()) .Then (function (result) {console.log (result) ؛}) ؛يمكن استخدام هذه الطريقة عندما تكون المعلمات التي تم تمريرها غير مؤكدة.
مرحبا ، funa
ما سبق هو مقدمة مفصلة للمعلومات حول الوعد --- $ Q Service في AngularJS. سنستمر في إضافة المعلومات ذات الصلة في المستقبل. شكرا لك على دعمك لهذا الموقع!