في هذه المحاضرة وممارسة ما يلي،
سوف نتحدث على وجه التحديد عن الجحيم الاتصال.
المشكلة التي تنشأ عند كتابة
الاستدعاءات في العقدة وخاصة الاستدعاءات المتداخلة والعقدة.
سننظر أيضًا في الوعود كطريقة واحدة لمعالجة مشكلة رد الاتصال بالجحيم.
لإعطائك فكرة عما ستؤدي إليه مشكلة رد الاتصال الجحيم النموذجية،
دعنا نعيد النظر في ملف index.js من التمرين السابق.
كما كنت أتحدث عن ذلك في التمرين السابق
لاحظت أنه لكل من العمليات التي نقوم بها،
يتم تضمين العملية اللاحقة داخل وظيفة رد الاتصال هنا
وهلم جرا حتى تشكل هرم مثل هيكل تذهب مرة أخرى.
لذلك ترى هذا الهرم مثل هيكل الناشئة داخل التعليمات البرمجية الخاصة بك.
الآن تخيل أنك تحتاج إلى تنفيذ عمليات متداخلة متعددة مثل هذا،
سوف تصبح التعليمات البرمجية الخاصة بك قريبا
جدا، معقدة جدا، وليس من السهل فك.
الآن هذا هو ما في العالم node.js،
فإنها تشير إلى الجحيم رد. و
هناك عدة طرق لل تخفيف من حدة المشكلة التي تنشأ.
الآن يمكنك تجنب هذا تماما بسبب حقيقة
أن لديك بعض العمليات التي تحتاج إلى
إكمال قبل بدء العملية التالية،
ولكن يمكننا إعادة ترتيب التعليمات البرمجية بطريقة للتخفيف من هذه المشكلة.
الوعود بأنها إحدى هذه الطرق لمعالجة هذا الأمر.
لذلك لتلخيص ما ناقشناه للتو،
رمز رد الاتصال المتداخلة بشكل كبير،
يسبب مشكلة رد الاتصال الجحيم وأنه
ينتج عن ميلنا لكتابة البرامج من أعلى إلى أسفل.
نحن لا تزال معلقة مع طريقتنا المتسلسلة لكتابة التعليمات البرمجية
ولذا فإننا نرى أنه أكثر ملاءمة لكتابة التعليمات البرمجية من أعلى إلى أسفل،
والنظر في الأمر كما لو أنها تنفذ في هذا الترتيب.
الآن يمكننا حل مشكلة Callback Hell عن طريق
عدم استخدام وظائف مجهولة لعمليات الاسترجاعات ولكن بدلاً من ذلك،
الإعلان عن تلك الوظائف بأسماء محددة،
ثم تجنب الطريقة التي نكتب بها الشفرة كما رأيت هنا.
هذا هو واحد من الأساليب التي يتخذها الناس للتعامل مع مشكلة رد الاتصال الجحيم.
وهناك العديد من النهج الأخرى التي تم اقتراحها،
وترد وصلات إلى اثنين من المواد في هذا الصدد في الموارد الإضافية.
ولكن في هذه المحاضرة بالذات،
سأركز على نهج معين
يستخدم للتعامل مع مشكلة رد الاتصال الجحيم،
وهذا هو استخدام الوعود.
حتى نتمكن من استخدام الوعود لترويض مشكلة الجحيم رد إلى حد كبير.
سننظر في كيف تساعدنا الوعود في هذا الصدد وفي
التمرين سنرى كيف أن برنامج تشغيل NODE-MONGO DB
يدعم بالفعل واجهة وكيل يمكننا الاستفادة من ذلك لإعادة كتابة التعليمات البرمجية الخاصة بنا
للاستفادة من دعم الوعد في برنامج تشغيل MONGO DB.
يلخص بإيجاز ما هو الوعد.
الوعد هو آلية تدعم الحساب غير المتزامن.
لذلك إذا كان لديك قدر من العمل الذي يجب القيام به،
فإن الوعد يعمل كوكيل لقيمة
غير معروفة في الوقت الحالي ولكن يتم إعطاء الوعد لك.
ولكن عندما تصبح القيمة متاحة،
وسوف تكون متاحة في المستقبل.
لذلك يمثل الوعد عنصرًا نائبًا لهذه القيمة.
إذا كانت القيمة نتائج بشكل صحيح،
ثم نتائج وعد الخاص بك بشكل صحيح ويمكنك
تنفيذ جزء من التعليمات البرمجية من أجل التعامل مع حقيقة أن الوعد حل بشكل صحيح،
إن لم يكن ثم التعامل مع الخطأ في هذه الحالة.
وبالتالي، فإن الوعد سيحل إما في حل أو رفض الوعد.
قد يحل الوعد المعلق
عندما يتم الحصول على القيمة بشكل صحيح،
لذلك في هذه الحالة، سيتم حلها أو ما نسميه الوفاء بالوعد.
لذلك عندما يتم حل الوعد،
سيكون لديك قطعة من التعليمات البرمجية التي
تتعامل مع حقيقة أن الوعد قد تم حلها.
إذا تم رفض الوعد،
فيجب عليك أيضًا التعامل مع هذا الموقف
رفض الوعد بالمقابل داخل شفرتك.
لذلك هذا هو السبب كلما قمت بإنشاء وعد،
فإنك توفر فقط خيارات التصميم والرفض منه.
عادة ما يتم التعامل مع خيار الحل من قبل الطبيب ثم الخيار لوعدك.
فلماذا نستخدم الوعود؟
يتم استخدام الوعود لأنها تعالج
مشكلة الجحيم رد إلى حد كبير ويمكن تغيير الوعود.
على سبيل المثال، إذا كان لديك وعد واحد والذي
بدوره يؤدي إلى استدعاء واحد آخر الذي سيعود وعد.
يمكن تغيير التعامل مع الوعد إلى التعامل مع الوعد السابق.
لذلك يمكن أن يكون لديك مجموعة من،
ثم المكالمات التي من شأنها التعامل مع عودة القيمة.
الآن سنرى استخدام هذا في التمرين الذي يتبع هذه المحاضرة.
لاستهلاك وعد،
سوف تسجل وظيفة رد اتصال مناسبة
عندما يتم إخطار المستهلك من وعد إما
من الوفاء أو رفض الوعد.
لذلك يتم تسجيل الاستدعاءات من خلال.then () إلى الوعد.
سوف تستخدم.catch () للقبض على الأخطاء داخل وعد الإرجاع.
الآن يمكن ربط الأساليب.then ()
معا كما سترى في التمرين الذي يلي.
على سبيل المثال، يمكنك عادة التعامل مع وعد عن طريق
تسلسل. ثم () و.catch () إلى قيمة الوعد.