لقد كان عملي أسهل قليلاً مؤخرًا. تذكرت كلمة وعد رأيتها دائمًا من قبل ، لذلك ذهبت لدراستها بصبر.
1: ما هو الوعد؟ لماذا هذا الشيء هناك؟
بادئ ذي بدء ، يتم إنشاء Promise لحل مشكلة كتابة التعليمات البرمجية خلال البرمجة غير المتزامنة لـ JavaScript.
مع تطوير JavaScript ، هناك المزيد والمزيد من السيناريوهات غير المتزامنة. تحتوي الواجهة الأمامية على Ajax و SetTimeout وما إلى ذلك ، وعقدة الخلفية غير متزامنة. وفقًا للممارسة التقليدية ، فإن تضمين عمليات الاسترجاعات في عمليات الاسترداد المختلفة. الكود يمكن أن يجعل الناس بالدوار.
في هذا الوقت ، اقترح مجتمع CommonJS مواصفات تسمى Promise/A+، والتي تحدد كيفية كتابة التعليمات البرمجية غير المتزامنة ، بما في ذلك استخدام متى/ثم/حل ، وما إلى ذلك لتنظيم التعليمات البرمجية غير المتزامنة.
نظرًا لأن هذه المواصفات أنيقة للغاية ، فقد نفذ الكثير من الناس هذه المواصفات واحدة تلو الأخرى ، بما في ذلك Prowder Mative Promise () ، المؤجلة في jQuery ، عندما.
لأن هذه المكتبات تلبي هذه المواصفات ، فقط تعلم واحدة. لقد تعلمت بشكل أساسي مؤجلة jQuery ، لذلك يتحدث هذا المقال بشكل أساسي عن هذا التنفيذ.
اثنان: Jquery مؤجلة
بادئ ذي بدء ، حول الكائن المؤجل ، كتب السيد روان ييفنغ مقالاً بالتفصيل ، يرجى النقر هنا. يوصى بقراءة مقاله أولاً ثم متابعة القراءة.
كما ذكر أعلاه ، تم تصميم الوعود لحل عدم التزامن (مثل Ajax) ، لذلك دعونا نقارن اختلافاتهم.
مكتوبة jQuery Ajax الكلاسيكية باسم
نسخة الكود كما يلي:
$ .ajax ({
النوع: "الحصول" ،
عنوان URL: "" ،
النجاح: الدالة () {} ،
خطأ؛ وظيفة () {}
}) ؛
معلمات النجاح والخطأ هي وظائف رد الاتصال عند النجاح/الفشل.
الآن أصبحت طريقة الكتابة Ajquery Ajax
نسخة الكود كما يلي:
$ .ajax ({
يكتب؛ "يحصل"،
عنوان URL: ""
}). تم (function () {}). fail (function () {}) ؛
بعد النجاح ، سيتم استدعاء الوظيفة في القيام به ، وإذا تم استدعاء الوظيفة في الفشل ، فسيتم استدعاء الوظيفة في الفشل.
بعد رؤية هذا ، قد يكون لديك أسئلة ، أي كائن يتم القيام به/تفشل؟ ما هو الكائن الذي يعيده $ .ajax () ولماذا توجد هاتين الطريقتين؟
الجواب في الكائن المؤجل المقدم أدناه.
يوفر jQuery نوعًا جديدًا من المؤجل. توليد مع $ .deferred (). على سبيل المثال
نسخة الكود كما يلي:
var def = $ .deferred () ؛
يرث هذا DEF العديد من الطرق ، بما في ذلك/فشل/حل/رفض ، إلخ.
حتى هنا نعلم أن $ $ .ajax () يعيد هذا الكائن بالفعل.
هناك العديد من الطرق للكائنات المؤجلة. فيما يلي العديد من تلك الشائعة الاستخدام. لمزيد من المعلومات ، يرجى الرجوع إلى API.
أول شيء هو إنشاء كائن DEF بشكل طبيعي. هناك العديد من الطرق هنا ، مثل:
نسخة الكود كما يلي:
var def = $ .deferred () ؛ // توليدها بنفسك
$ .ajax ({}) ؛ // إرجاع طريقة AJAX أيضًا كائن DEF
$. عندما () ؛ // عندما ستعود الطريقة أيضًا إلى كائن DEF
هنا ، $. عندما () يمكن التحدث عنها بشكل منفصل. عادةً ما تتلقى هذه الطريقة كائنًا مؤجلًا أو أكثر ، ثم يحدد حالة الكائن الذي يتم إرجاعه بمقدار $. عندما () بناءً على حالة هذه الكائنات المؤجلة. أحد سيناريوهات الاستخدام هو طلبات Ajax المتعددة. إذا فشل أحدهم ، فهذا يعتبر فشلًا. ثم يمكنك تمرير أساليب Ajax متعددة إلى $. عندما () ، مثل $. ثم $. عند إرجاع كائن DEF (تم الحكم عليه بناءً على نتائج هذين الطلبين).
ثم تحصل على كائن DEF ، وهناك سلسلة من الطرق لتغيير حالة هذا الكائن.
نسخة الكود كما يلي:
def.Resolve () ؛ // قم بتعيين كائن DEF ليتم إكماله ، ثم يتم تنفيذ الوظيفة المرتبطة بـ def.done () على الفور.
def.reject () ؛ // قم بتعيين كائن DEF ليخفق ، ثم يتم تنفيذ الوظيفة المرتبطة بـ def.fail () على الفور.
def.Notify () ؛ // أثناء تنفيذ كائن DEF ، فإن رد الاتصال المقابل هو def.progress ().
التالي هو طريقة ضبط رد الاتصال ، ويتوافق الطلب مع ما ورد أعلاه ، أي ما ستدعو الدولة إلى ما هو رد الاتصال
نسخة الكود كما يلي:
def.done () ؛ // المقابلة لـ def.Resolve () ؛
def.fail () ؛ // المقابلة لـ def.reject () ؛
def.progress () ؛ // المقابلة لـ def.notify () ؛
// خاص
def.always () ؛ // دعا إذا نجحت أو فشل
def.Then () ؛ // قبول وظائف متعددة ، من أجل النجاح والفشل والتقدم
في الواقع ، في هذه المرحلة ، يكون استخدام الكائن المؤجل هو نفسه تقريبًا. ومع ذلك ، يوفر jQuery العديد من واجهات برمجة التطبيقات
نسخة الكود كما يلي:
// تحقق من فئة الحالة الحالية
def.IsRejected () ؛
def.isresolved () ؛
def.State () ؛
كما يوحي الاسم ، لن تتم مناقشة واجهات برمجة التطبيقات هذه بالتفصيل. للحصول على التفاصيل ، يمكنك التحقق من وثائق jQuery API الواردة أعلاه.
هناك طريقة أخرى ، وهي أننا في بعض الأحيان نريد إعطاء كائن DEF خارجي ، ومن ثم يمكن لهذا الكائن تعيين عمليات الاسترجاعات لمختلف الحالات ، ولكن لا يمكننا تغيير حالتها ، حتى نتمكن من استخدامه.
نسخة الكود كما يلي:
def.promise () ؛
إرجاع كائن Promisee ، وهو مجموعة فرعية من الكائن المؤجل. يمكنك استخدام/فشل وطرق أخرى ، دون حل/رفض وطرق أخرى. هو أساسا حماية حالة كائن DEF من تعديل من الخارج.
في هذه المرحلة ، تمت مناقشة جميع الوعود. يمكنك الآن استخدامها في مشاريعك. بالإضافة إلى ذلك ، أتمنى لك سنوات مبكرة سعيدة مقدمًا. أتمنى لكم جميعًا سنة سعيدة من الأغنام^^.