1
00:00:03,920 --> 00:00:08,675
في هذه المحاضرة وممارسة ما يلي،

2
00:00:08,675 --> 00:00:12,000
سوف نتحدث على وجه التحديد عن الجحيم الاتصال.

3
00:00:12,000 --> 00:00:15,330
المشكلة التي تنشأ عند كتابة

4
00:00:15,330 --> 00:00:19,980
الاستدعاءات في العقدة وخاصة الاستدعاءات المتداخلة والعقدة.

5
00:00:19,980 --> 00:00:26,795
سننظر أيضًا في الوعود كطريقة واحدة لمعالجة مشكلة رد الاتصال بالجحيم.

6
00:00:26,795 --> 00:00:34,340
لإعطائك فكرة عما ستؤدي إليه مشكلة رد الاتصال الجحيم النموذجية،

7
00:00:34,340 --> 00:00:40,115
دعنا نعيد النظر في ملف index.js من التمرين السابق.

8
00:00:40,115 --> 00:00:44,020
كما كنت أتحدث عن ذلك في التمرين السابق

9
00:00:44,020 --> 00:00:47,959
لاحظت أنه لكل من العمليات التي نقوم بها،

10
00:00:47,959 --> 00:00:53,990
يتم تضمين العملية اللاحقة داخل وظيفة رد الاتصال هنا

11
00:00:53,990 --> 00:01:00,320
وهلم جرا حتى تشكل هرم مثل هيكل تذهب مرة أخرى.

12
00:01:00,320 --> 00:01:06,160
لذلك ترى هذا الهرم مثل هيكل الناشئة داخل التعليمات البرمجية الخاصة بك.

13
00:01:06,160 --> 00:01:11,540
الآن تخيل أنك تحتاج إلى تنفيذ عمليات متداخلة متعددة مثل هذا،

14
00:01:11,540 --> 00:01:13,850
سوف تصبح التعليمات البرمجية الخاصة بك قريبا

15
00:01:13,850 --> 00:01:18,085
جدا، معقدة جدا، وليس من السهل فك.

16
00:01:18,085 --> 00:01:22,240
الآن هذا هو ما في العالم node.js،

17
00:01:22,240 --> 00:01:25,830
فإنها تشير إلى الجحيم رد. و

18
00:01:25,960 --> 00:01:30,845
هناك عدة طرق لل تخفيف من حدة المشكلة التي تنشأ.

19
00:01:30,845 --> 00:01:35,690
الآن يمكنك تجنب هذا تماما بسبب حقيقة

20
00:01:35,690 --> 00:01:38,300
أن لديك بعض العمليات التي تحتاج إلى

21
00:01:38,300 --> 00:01:41,480
إكمال قبل بدء العملية التالية،

22
00:01:41,480 --> 00:01:47,765
ولكن يمكننا إعادة ترتيب التعليمات البرمجية بطريقة للتخفيف من هذه المشكلة.

23
00:01:47,765 --> 00:01:52,080
الوعود بأنها إحدى هذه الطرق لمعالجة هذا الأمر.

24
00:01:52,080 --> 00:01:56,015
لذلك لتلخيص ما ناقشناه للتو،

25
00:01:56,015 --> 00:01:59,435
رمز رد الاتصال المتداخلة بشكل كبير،

26
00:01:59,435 --> 00:02:02,990
يسبب مشكلة رد الاتصال الجحيم وأنه

27
00:02:02,990 --> 00:02:07,010
ينتج عن ميلنا لكتابة البرامج من أعلى إلى أسفل.

28
00:02:07,010 --> 00:02:11,990
نحن لا تزال معلقة مع طريقتنا المتسلسلة لكتابة التعليمات البرمجية

29
00:02:11,990 --> 00:02:17,420
ولذا فإننا نرى أنه أكثر ملاءمة لكتابة التعليمات البرمجية من أعلى إلى أسفل،

30
00:02:17,420 --> 00:02:21,145
والنظر في الأمر كما لو أنها تنفذ في هذا الترتيب.

31
00:02:21,145 --> 00:02:24,140
الآن يمكننا حل مشكلة Callback Hell عن طريق

32
00:02:24,140 --> 00:02:27,460
عدم استخدام وظائف مجهولة لعمليات الاسترجاعات ولكن بدلاً من ذلك،

33
00:02:27,460 --> 00:02:30,870
الإعلان عن تلك الوظائف بأسماء محددة،

34
00:02:30,870 --> 00:02:35,630
ثم تجنب الطريقة التي نكتب بها الشفرة كما رأيت هنا.

35
00:02:35,630 --> 00:02:41,190
هذا هو واحد من الأساليب التي يتخذها الناس للتعامل مع مشكلة رد الاتصال الجحيم.

36
00:02:41,190 --> 00:02:44,990
وهناك العديد من النهج الأخرى التي تم اقتراحها،

37
00:02:44,990 --> 00:02:51,085
وترد وصلات إلى اثنين من المواد في هذا الصدد في الموارد الإضافية.

38
00:02:51,085 --> 00:02:53,720
ولكن في هذه المحاضرة بالذات،

39
00:02:53,720 --> 00:02:56,810
سأركز على نهج معين

40
00:02:56,810 --> 00:03:00,275
يستخدم للتعامل مع مشكلة رد الاتصال الجحيم،

41
00:03:00,275 --> 00:03:02,370
وهذا هو استخدام الوعود.

42
00:03:02,370 --> 00:03:07,345
حتى نتمكن من استخدام الوعود لترويض مشكلة الجحيم رد إلى حد كبير.

43
00:03:07,345 --> 00:03:12,200
سننظر في كيف تساعدنا الوعود في هذا الصدد وفي

44
00:03:12,200 --> 00:03:17,180
التمرين سنرى كيف أن برنامج تشغيل NODE-MONGO DB

45
00:03:17,180 --> 00:03:21,665
يدعم بالفعل واجهة وكيل يمكننا الاستفادة من ذلك لإعادة كتابة التعليمات البرمجية الخاصة بنا

46
00:03:21,665 --> 00:03:27,495
للاستفادة من دعم الوعد في برنامج تشغيل MONGO DB.

47
00:03:27,495 --> 00:03:31,455
يلخص بإيجاز ما هو الوعد.

48
00:03:31,455 --> 00:03:35,625
الوعد هو آلية تدعم الحساب غير المتزامن.

49
00:03:35,625 --> 00:03:39,250
لذلك إذا كان لديك قدر من العمل الذي يجب القيام به،

50
00:03:39,250 --> 00:03:43,550
فإن الوعد يعمل كوكيل لقيمة

51
00:03:43,550 --> 00:03:48,100
غير معروفة في الوقت الحالي ولكن يتم إعطاء الوعد لك.

52
00:03:48,100 --> 00:03:50,270
ولكن عندما تصبح القيمة متاحة،

53
00:03:50,270 --> 00:03:53,225
وسوف تكون متاحة في المستقبل.

54
00:03:53,225 --> 00:03:56,690
لذلك يمثل الوعد عنصرًا نائبًا لهذه القيمة.

55
00:03:56,690 --> 00:03:58,795
إذا كانت القيمة نتائج بشكل صحيح،

56
00:03:58,795 --> 00:04:02,240
ثم نتائج وعد الخاص بك بشكل صحيح ويمكنك

57
00:04:02,240 --> 00:04:08,735
تنفيذ جزء من التعليمات البرمجية من أجل التعامل مع حقيقة أن الوعد حل بشكل صحيح،

58
00:04:08,735 --> 00:04:12,950
إن لم يكن ثم التعامل مع الخطأ في هذه الحالة.

59
00:04:12,950 --> 00:04:20,060
وبالتالي، فإن الوعد سيحل إما في حل أو رفض الوعد.

60
00:04:20,060 --> 00:04:23,515
قد يحل الوعد المعلق

61
00:04:23,515 --> 00:04:27,105
عندما يتم الحصول على القيمة بشكل صحيح،

62
00:04:27,105 --> 00:04:31,755
لذلك في هذه الحالة، سيتم حلها أو ما نسميه الوفاء بالوعد.

63
00:04:31,755 --> 00:04:33,540
لذلك عندما يتم حل الوعد،

64
00:04:33,540 --> 00:04:35,960
سيكون لديك قطعة من التعليمات البرمجية التي

65
00:04:35,960 --> 00:04:38,760
تتعامل مع حقيقة أن الوعد قد تم حلها.

66
00:04:38,760 --> 00:04:40,455
إذا تم رفض الوعد،

67
00:04:40,455 --> 00:04:43,985
فيجب عليك أيضًا التعامل مع هذا الموقف

68
00:04:43,985 --> 00:04:48,470
رفض الوعد بالمقابل داخل شفرتك.

69
00:04:48,470 --> 00:04:52,400
لذلك هذا هو السبب كلما قمت بإنشاء وعد،

70
00:04:52,400 --> 00:04:56,680
فإنك توفر فقط خيارات التصميم والرفض منه.

71
00:04:56,680 --> 00:05:02,905
عادة ما يتم التعامل مع خيار الحل من قبل الطبيب ثم الخيار لوعدك.

72
00:05:02,905 --> 00:05:05,960
فلماذا نستخدم الوعود؟

73
00:05:05,960 --> 00:05:08,060
يتم استخدام الوعود لأنها تعالج

74
00:05:08,060 --> 00:05:13,130
مشكلة الجحيم رد إلى حد كبير ويمكن تغيير الوعود.

75
00:05:13,130 --> 00:05:15,860
على سبيل المثال، إذا كان لديك وعد واحد والذي

76
00:05:15,860 --> 00:05:20,690
بدوره يؤدي إلى استدعاء واحد آخر الذي سيعود وعد.

77
00:05:20,690 --> 00:05:26,525
يمكن تغيير التعامل مع الوعد إلى التعامل مع الوعد السابق.

78
00:05:26,525 --> 00:05:28,315
لذلك يمكن أن يكون لديك مجموعة من،

79
00:05:28,315 --> 00:05:33,635
ثم المكالمات التي من شأنها التعامل مع عودة القيمة.

80
00:05:33,635 --> 00:05:39,930
الآن سنرى استخدام هذا في التمرين الذي يتبع هذه المحاضرة.

81
00:05:39,930 --> 00:05:42,275
لاستهلاك وعد،

82
00:05:42,275 --> 00:05:47,675
سوف تسجل وظيفة رد اتصال مناسبة

83
00:05:47,675 --> 00:05:50,810
عندما يتم إخطار المستهلك من وعد إما

84
00:05:50,810 --> 00:05:53,750
من الوفاء أو رفض الوعد.

85
00:05:53,750 --> 00:05:59,860
لذلك يتم تسجيل الاستدعاءات من خلال.then () إلى الوعد.

86
00:05:59,860 --> 00:06:07,040
سوف تستخدم.catch () للقبض على الأخطاء داخل وعد الإرجاع.

87
00:06:07,040 --> 00:06:09,845
الآن يمكن ربط الأساليب.then ()

88
00:06:09,845 --> 00:06:15,205
معا كما سترى في التمرين الذي يلي.

89
00:06:15,205 --> 00:06:19,730
على سبيل المثال، يمكنك عادة التعامل مع وعد عن طريق

90
00:06:19,730 --> 00:06:26,250
تسلسل. ثم () و.catch () إلى قيمة الوعد.