1
00:00:03,650 --> 00:00:06,180
في التمرين السابق،

2
00:00:06,180 --> 00:00:09,414
تعلمنا عن جانبين جديدين لجافا سكريبت،

3
00:00:09,414 --> 00:00:13,155
ودعمهم لوظائف الدرجة الأولى والإغلاق.

4
00:00:13,155 --> 00:00:20,250
رأينا أيضًا كيف تتعامل العقدة مع جانب البرمجة غير المتزامن وكيف

5
00:00:20,250 --> 00:00:24,015
تدعم العقدة التنفيذ غير المتزامن للرمز

6
00:00:24,015 --> 00:00:28,365
باستخدام عمليات الاسترجاعات وكذلك معالجة الأخطاء.

7
00:00:28,365 --> 00:00:31,815
دعونا ننظر إلى مثال على كيفية الاستفادة من هذا

8
00:00:31,815 --> 00:00:36,650
داخل تطبيق عقدة لدينا في هذا التمرين.

9
00:00:36,650 --> 00:00:42,315
استمرار مع حيث توقفنا في التمرين السابق،

10
00:00:42,315 --> 00:00:48,025
والآن أنا ذاهب للذهاب وتعديل وحدة عقدة المستطيل،

11
00:00:48,025 --> 00:00:51,670
بحيث يمكن أن تأخذ مساعدة من الاستدعاءات.

12
00:00:51,670 --> 00:00:55,375
لذلك سأقوم بإزالة هذه الصادرات هنا،

13
00:00:55,375 --> 00:00:59,800
وبدلاً من ذلك، سيقومون بتعديل هذه الوظيفة.

14
00:00:59,800 --> 00:01:03,190
أنا ذاهب إلى الاستفادة من هاتين الوظيفتين في وقت لاحق قليلا،

15
00:01:03,190 --> 00:01:05,925
لذلك لهذا السبب أنا حفظ لهم في الجزء السفلي.

16
00:01:05,925 --> 00:01:07,515
لذا دعني أبقيهم جانباً

17
00:01:07,515 --> 00:01:11,530
ثم سأقوم بتعديل هذه الوحدة المستطيلة على النحو التالي.

18
00:01:11,530 --> 00:01:15,270
لذلك سنقول module.exports.

19
00:01:15,270 --> 00:01:20,025
لذلك نحن نستخدم الطريقة القياسية يتم التعامل مع الوحدة.

20
00:01:20,025 --> 00:01:26,185
وهذا هو الذهاب إلى تصدير هذه الوظيفة التي تأخذ هذه المعلمات الثلاثة،

21
00:01:26,185 --> 00:01:30,565
x و y و رد الاتصال.

22
00:01:30,565 --> 00:01:37,300
رد الاتصال هو وظيفة التي سيتم توفيرها في عندما يتم استدعاء هذه الوحدة.

23
00:01:37,300 --> 00:01:43,825
لذلك هذا هو استخدام وظائف الدرجة الأولى التي تحدثنا عنها في وقت سابق.

24
00:01:43,825 --> 00:01:46,775
حتى داخل هذا الاستدعاء،

25
00:01:46,775 --> 00:01:49,940
حتى تتمكن من رؤية أنك تحصل على معلمتين، x و y

26
00:01:49,940 --> 00:01:51,965
في هذه الحالة، بالنسبة للمستطيل،

27
00:01:51,965 --> 00:01:55,520
تتوافق x و y مع طول وعرض

28
00:01:55,520 --> 00:02:01,550
المستطيل الذي يتم تمريره كقيمتين.

29
00:02:01,550 --> 00:02:05,090
حتى داخل هنا، ونحن في طريقنا للتحقق لمعرفة

30
00:02:05,090 --> 00:02:10,300
ما إذا كان س أقل من أو يساوي الصفر أو ص هو أقل من أو يساوي الصفر.

31
00:02:10,300 --> 00:02:13,255
لقد كتبنا رمز مثل هذا هنا.

32
00:02:13,255 --> 00:02:17,630
لذلك أنا فقط ذاهب لنسخ هذا الرمز من هنا

33
00:02:17,630 --> 00:02:23,330
ومن ثم إحضاره إلى هنا وبعد ذلك سنقوم بتحريره.

34
00:02:23,330 --> 00:02:26,090
لذلك في هذه الحالة، هذا إذا كان x

35
00:02:26,090 --> 00:02:30,135
أقل من أو يساوي الصفر أو ص أقل من أو يساوي الصفر.

36
00:02:30,135 --> 00:02:32,810
في هذه الحالة، ماذا نفعل؟

37
00:02:32,810 --> 00:02:35,435
في هذه الحالة، نلاحظ

38
00:02:35,435 --> 00:02:39,750
أن أبعاد المستطيل أقل من أو تساوي الصفر.

39
00:02:39,750 --> 00:02:43,775
لذا علينا أن نتعامل مع الأمر بشكل مختلف،

40
00:02:43,775 --> 00:02:46,330
وسنقوم بالجزء الآخر منه.

41
00:02:46,330 --> 00:02:52,790
الجزء الآخر حيث نتعامل مع الوضع حيث المستطيل هو مستطيل صالح.

42
00:02:52,790 --> 00:02:54,245
لذلك في هذه الحالة،

43
00:02:54,245 --> 00:03:04,580
ما سنفعله هو استخدام setTimeout.

44
00:03:04,580 --> 00:03:08,090
حتى هنا، أنا محاكاة حقيقة أن كل ما

45
00:03:08,090 --> 00:03:11,860
يتم القيام به في هذا المستطيل سوف يستغرق بعض الوقت.

46
00:03:11,860 --> 00:03:14,375
إذن هذه هي المعالجة غير المتزامنة.

47
00:03:14,375 --> 00:03:18,710
الآن، بما أنه ليس لدي الكثير من العمل للقيام به في الخلفية،

48
00:03:18,710 --> 00:03:22,530
لذلك سأقوم بمحاكاة ذلك ببساطة باستخدام

49
00:03:22,530 --> 00:03:24,830
وظيفة setTimeout من JavaScript ثم

50
00:03:24,830 --> 00:03:28,825
التأخير قبل استدعاء وظيفة رد الاتصال.

51
00:03:28,825 --> 00:03:32,210
لذا فإن الطريقة التي أرتب بها هذا هي كما يلي.

52
00:03:32,210 --> 00:03:34,270
حتى داخل setTimeout،

53
00:03:34,270 --> 00:03:40,445
وأنا ذاهب لاستدعاء هذه الوظيفة هناك

54
00:03:40,445 --> 00:03:44,855
وترتيب تأخير

55
00:03:44,855 --> 00:03:50,570
2،000 ميلي ثانية أو ثانيتين وبعد ذلك سيتم استدعاء هذه الوظيفة.

56
00:03:50,570 --> 00:03:52,003
لذلك إذا كنت تتذكر،

57
00:03:52,003 --> 00:03:54,890
setTimeout المدعوم في JavaScript،

58
00:03:54,890 --> 00:03:58,070
فإنه يأخذ

59
00:03:58,070 --> 00:04:03,450
كمعلمة الأولى وظيفة والمعلمة الثانية ستكون الفترة الزمنية التي سيتأخر فيها ذلك.

60
00:04:03,450 --> 00:04:07,120
لذلك اسمحوا لي أن المسافة البادئة هذا في.

61
00:04:07,120 --> 00:04:09,255
الآن، أنا بحاجة لملء هذه الوظيفة هنا.

62
00:04:09,255 --> 00:04:11,915
لذلك لقد بدأت مع وظيفة السهم هنا

63
00:04:11,915 --> 00:04:15,575
التي لا تأخذ المعلمات وبعد ذلك عندما يتم استدعاء هناك،

64
00:04:15,575 --> 00:04:20,745
وأنا ذاهب لإصدار مكالمة إلى رد الاتصال.

65
00:04:20,745 --> 00:04:22,880
رد الاتصال هذا هو وظيفة رد الاتصال التي

66
00:04:22,880 --> 00:04:25,760
سيتم تمريرها كمعلمة ثالثة هنا. تأخذ

67
00:04:25,760 --> 00:04:33,440
وظيفة رد الاتصال هذه، كما لاحظت، معلمتين.

68
00:04:33,440 --> 00:04:38,245
الأول هو الخطأ والثاني هو قيمة الإرجاع.

69
00:04:38,245 --> 00:04:40,625
حتى في هذه الحالة، بما أن لدينا خطأ،

70
00:04:40,625 --> 00:04:44,750
لأن x هو أقل من أو يساوي الصفر و y أقل من أو يساوي الصفر،

71
00:04:44,750 --> 00:04:50,820
وبالتالي فإن القيمة الأولى أنا ذاهب لتمرير في كخطأ جديد،

72
00:04:50,820 --> 00:05:00,603
وهذا الخطأ هو بالضبط هذه السلسلة التي كنت تستخدم في console.log

73
00:05:00,603 --> 00:05:03,915
ثم، وهذا هو ما سوف تمر في الخطأ هنا.

74
00:05:03,915 --> 00:05:06,160
اسمحوا لي الآن حذف أن console.log،

75
00:05:06,160 --> 00:05:07,625
لم أعد بحاجة إليها.

76
00:05:07,625 --> 00:05:08,890
لذلك بالنسبة

77
00:05:08,890 --> 00:05:13,210
إلى رد الاتصال، سأقوم بإنشاء كائن خطأ جديد ثم قم

78
00:05:13,210 --> 00:05:18,850
بتمرير هذا كقيمة إرجاع لوظيفة رد الاتصال، المعلمة الأولى.

79
00:05:18,850 --> 00:05:23,770
لذلك سأقول أن أبعاد المستطيل يجب أن تكون أكبر من الصفر.

80
00:05:23,770 --> 00:05:28,240
لذلك سنقول l،

81
00:05:28,240 --> 00:05:39,000
هذا هو x والقيمة y التي حصلنا عليها كقيم الإدخال هناك.

82
00:05:39,000 --> 00:05:40,650
لذلك هذا هو رد الاتصال.

83
00:05:40,650 --> 00:05:43,890
والجزء الثاني من هذا الاتصال،

84
00:05:43,890 --> 00:05:51,290
وأنا ذاهب لتمرير في كما فارغة لأن هذا هو الذهاب إلى إرجاع خطأ.

85
00:05:51,290 --> 00:05:54,345
لذلك عندما تقوم بإرجاع خطأ كمعلمة أولى،

86
00:05:54,345 --> 00:05:59,250
سيتم تجاهل المعلمة الثانية عندما تم استلام رد الاتصال هذا للتو من قبل

87
00:05:59,250 --> 00:06:06,510
وحدة العقدة من حيث نسمي هذه الوظيفة المعينة هناك.

88
00:06:06,510 --> 00:06:09,085
لذلك، مع هذا الترتيب،

89
00:06:09,085 --> 00:06:10,700
أقل من الصفر،

90
00:06:10,700 --> 00:06:18,590
لذلك اسمحوا لي أن أعطي بعض المساحة هنا بحيث يتم وضع مسافة بادئة بشكل صحيح هنا.

91
00:06:18,590 --> 00:06:21,650
لذا، فإن الطريقة التي أرتب بها هذا

92
00:06:21,650 --> 00:06:26,135
هنا هي أنه إذا كان x أقل من الصفر و y أقل من الصفر،

93
00:06:26,135 --> 00:06:30,040
فسأقوم باستدعاء وظيفة رد الاتصال التي تم تمريرها،

94
00:06:30,040 --> 00:06:32,424
ولكن المعلمة الأولى ستمر في

95
00:06:32,424 --> 00:06:36,307
الخطأ لأننا هنا نلاحظ أن هناك خطأ،

96
00:06:36,307 --> 00:06:38,930
والمعلمة الثانية سيكون فارغًا.

97
00:06:38,930 --> 00:06:40,940
إذا لم يكن هذا هو الحال،

98
00:06:40,940 --> 00:06:44,550
ثم أنا ذاهب لاستدعاء نفس رد الاتصال،

99
00:06:44,550 --> 00:06:46,910
ولكن مع المعلمة الأولى.

100
00:06:46,910 --> 00:06:51,800
لذلك اسمحوا لي أن نسخ هذا الرمز في هنا.

101
00:06:51,800 --> 00:07:05,490
ما زلت سأستخدم setTimeout هنا.

102
00:07:05,490 --> 00:07:10,727
ولكن هذا الجزء الأول لن يكون خطأ،

103
00:07:10,727 --> 00:07:13,005
بدلا من ذلك، الجزء الأول،

104
00:07:13,005 --> 00:07:15,235
في هذه الحالة، لا يوجد خطأ.

105
00:07:15,235 --> 00:07:20,455
لذلك أنا ذاهب فقط لتمرير هذه القيمة باعتبارها فارغة.

106
00:07:20,455 --> 00:07:22,950
لذلك هذا يعني أنه تم تعيين الخطأ إلى null.

107
00:07:22,950 --> 00:07:26,335
لذلك هذا هو مستطيل صالح.

108
00:07:26,335 --> 00:07:29,965
حتى نتمكن من حساب القيم للمستطيل.

109
00:07:29,965 --> 00:07:35,165
ولكن بدلاً من ذلك، سأقوم ببساطة بتمرير

110
00:07:35,165 --> 00:07:40,020
كائن JavaScript يحتوي على الوظيفتين

111
00:07:40,020 --> 00:07:45,330
كقيمتين داخل كائن JavaScript هذا.

112
00:07:45,330 --> 00:07:50,355
لذلك، هنا أنا ذاهب إلى اتخاذ هذه اثنين،

113
00:07:50,355 --> 00:07:54,530
محيط والمنطقة،

114
00:07:55,250 --> 00:08:05,639
وبعد ذلك سيتم تمرير هذه اثنين في كما القيمتين هنا،

115
00:08:05,639 --> 00:08:07,807
محيط والمنطقة.

116
00:08:07,807 --> 00:08:12,740
وهذان الاثنان، نظرًا لأنهما يحدثان أن يكونا كائن جافا سكريبت،

117
00:08:12,740 --> 00:08:16,544
لذلك سيكون المحيط والمنطقة

118
00:08:16,544 --> 00:08:22,690
هما الخاصتان اللتان سأنقلهما داخل كائن JavaScript،

119
00:08:22,690 --> 00:08:25,295
وهذا كل شيء.

120
00:08:25,295 --> 00:08:28,570
حتى هنا، في الحالة الثانية،

121
00:08:28,570 --> 00:08:32,034
يتم تعيين الخطأ إلى فارغة لأنه لا يوجد خطأ،

122
00:08:32,034 --> 00:08:33,190
ولكن الجزء الثاني،

123
00:08:33,190 --> 00:08:37,715
لاحظ أنني تمرير في كائن جافا سكريبت يحتوي على اثنين من الخصائص،

124
00:08:37,715 --> 00:08:41,530
محيط والمنطقة، وهما وظيفتان هنا.

125
00:08:41,530 --> 00:08:46,060
لذا فإن الوظيفتين هما وظيفة المحيط ووظيفة المنطقة.

126
00:08:46,060 --> 00:08:49,390
لذلك سيتم تمرير كائن جافا سكريبت هذا مرة أخرى

127
00:08:49,390 --> 00:08:53,705
كقيمة الإرجاع لاستدعاء هنا، القيمة الثانية.

128
00:08:53,705 --> 00:08:56,035
ومرة أخرى، سأقوم بتأخير هذا

129
00:08:56,035 --> 00:09:02,900
بفاصل زمني ثانٍ قبل أن يتم تمرير القيمة مرة أخرى بواسطة هذه الوظيفة.

130
00:09:02,900 --> 00:09:07,075
السبب في أنني أستخدم setTimeout

131
00:09:07,075 --> 00:09:11,780
هو محاكاة تأخير قبل أن يأتي رد الاتصال من الجانب الآخر.

132
00:09:11,780 --> 00:09:15,280
لذلك يمثل هذا النوع من الحالات حيث، على سبيل المثال،

133
00:09:15,280 --> 00:09:18,565
تقوم بإصدار استدعاء قاعدة بيانات لقاعدة البيانات،

134
00:09:18,565 --> 00:09:23,300
ويجب قراءة قاعدة البيانات قبل أن يتم تمرير القيمة مرة أخرى إليك.

135
00:09:23,300 --> 00:09:25,855
لذلك هذا سوف يستغرق قدرا معينا من الوقت.

136
00:09:25,855 --> 00:09:32,560
لذلك أنا أساسا محاكاة هذا في هذه اللحظة باستخدام وظيفة setTimeout هنا.

137
00:09:32,560 --> 00:09:37,000
في وقت لاحق، سترى أنه عندما ندمج MongoDB مع

138
00:09:37,000 --> 00:09:43,060
Express لدينا في التدريبات اللاحقة،

139
00:09:43,060 --> 00:09:45,580
يجب محاكاة هذا التأخير،

140
00:09:45,580 --> 00:09:48,670
وسوف يكون سببه تلقائيا بسبب حقيقة أنك تحتاج إلى القيام

141
00:09:48,670 --> 00:09:54,190
بعمليات قاعدة البيانات وراء الكواليس قبل الحصول على البيانات.

142
00:09:54,190 --> 00:10:00,325
حتى هنا، بعد الانتهاء من تحديث وحدات المستطيل هذا،

143
00:10:00,325 --> 00:10:03,135
لذلك ترى هنا أن وحدة المستطيل تأخذ في

144
00:10:03,135 --> 00:10:06,830
ثلاثة معلمات كما انها مكالمة إدخال هنا،

145
00:10:06,830 --> 00:10:08,920
س، ص و رد الاتصال.

146
00:10:08,920 --> 00:10:12,445
وهكذا، فإن رد الاتصال هو وظيفة رد الاتصال التي يتم توفيرها هنا.

147
00:10:12,445 --> 00:10:16,585
وسيتم استدعاء وظيفة رد الاتصال هذه داخل هنا،

148
00:10:16,585 --> 00:10:18,685
وعندما يتم استدعاء وظيفة رد الاتصال،

149
00:10:18,685 --> 00:10:22,495
إما

150
00:10:22,495 --> 00:10:28,045
أن تقوم بتمرير خطأ مرة أخرى أو تقوم بتمرير وظيفة تسمح لك بحساب محيط ومنطقة المستطيل.

151
00:10:28,045 --> 00:10:33,835
الآن، هذا النمط من الاتصال في وتمرير وظيفة رد اتصال

152
00:10:33,835 --> 00:10:40,300
من وحدة عقدة واحدة ثم وحدة العقدة الثانية التي عندما تكتمل،

153
00:10:40,300 --> 00:10:44,800
سوف تمر مرة أخرى النتيجة باستخدام وظيفة رد الاتصال هو

154
00:10:44,800 --> 00:10:50,135
بالضبط النمط الذي سترى غالبا ما تتكرر في تطبيقات عقدة.

155
00:10:50,135 --> 00:10:52,360
لذلك هذا هو السبب في أنني أوضح ذلك.

156
00:10:52,360 --> 00:10:58,735
بالطبع، هذا مثال مفتعل أقوم بتوضيحه هنا ولكنه يظهر

157
00:10:58,735 --> 00:11:02,525
جميع الأنماط القياسية التي ستستخدمها مع

158
00:11:02,525 --> 00:11:07,065
وظائف العقدة ورد الاتصال وكذلك معالجة الأخطاء.

159
00:11:07,065 --> 00:11:10,955
الآن، قمنا بتحديث وحدة المستطيل هنا.

160
00:11:10,955 --> 00:11:16,870
دعونا نذهب وإصلاح هذا الملف index.js بحيث يمكن أن تمر في وظيفة رد الاتصال

161
00:11:16,870 --> 00:11:23,770
ثم التعامل مع قيمة الإرجاع التي يتم إرسالها مرة أخرى من وحدة المستطيل.

162
00:11:23,770 --> 00:11:26,940
التبديل مرة أخرى إلى index.js،

163
00:11:26,940 --> 00:11:31,270
والآن نحن ذاهبون لتحديث ملف index.js على النحو التالي.

164
00:11:31,270 --> 00:11:37,955
أنا ذاهب لإزالة هذا من ملف index.js بدلا من ذلك.

165
00:11:37,955 --> 00:11:42,430
هنا، ما سنفعله في نهاية المطاف هو استدعاء

166
00:11:42,430 --> 00:11:49,120
وحدة المستطيل هذه ومن

167
00:11:49,120 --> 00:11:53,880
ثم تمرير في l و b كمعلمتين.

168
00:11:53,880 --> 00:12:00,300
والمعلمة الثالثة التي سأقوم بتمريرها هي وظيفة رد الاتصال هذه.

169
00:12:00,300 --> 00:12:10,080
وبالتالي فإن وظيفة رد الاتصال لديها معلمتين، خطأ ومستطيل.

170
00:12:10,080 --> 00:12:15,860
ويتم تنفيذ وظيفة رد الاتصال هذه على النحو التالي هنا.

171
00:12:15,860 --> 00:12:19,090
حتى هنا، ترى أن أنا استدعاء

172
00:12:19,090 --> 00:12:23,785
هذه وحدة العقدة المستطيلة وأنا

173
00:12:23,785 --> 00:12:29,050
تمرير في طول واتساع المعلمات الأولين.

174
00:12:29,050 --> 00:12:31,285
والمعلمة الثالثة هي، بالطبع،

175
00:12:31,285 --> 00:12:34,355
وظيفة رد الاتصال التي أقوم بتنفيذها هنا.

176
00:12:34,355 --> 00:12:38,250
لذا، هذه هي وظيفة السهم التي أقوم بتنفيذها هنا.

177
00:12:38,250 --> 00:12:40,510
حتى داخل وظيفة رد الاتصال هذه،

178
00:12:40,510 --> 00:12:43,245
كيف يمكنني التعامل مع قيمة الإرجاع؟

179
00:12:43,245 --> 00:12:46,860
حتى هنا سوف أقول إذا (err)،

180
00:12:46,860 --> 00:12:51,335
لذلك إذا تم إرجاع قيمة الخطأ لك،

181
00:12:51,335 --> 00:12:59,500
ثم سأقوم ببساطة console.log وسأقول

182
00:12:59,500 --> 00:13:09,100
«خطأ» ثم القيمة الثانية هي err.message.

183
00:13:09,100 --> 00:13:11,445
أذكر أنه في المستطيل،

184
00:13:11,445 --> 00:13:14,820
أنشأنا كائن الخطأ الجديد هذا

185
00:13:14,820 --> 00:13:18,155
ثم مررنا في هذه السلسلة داخل كائن الخطأ هذا.

186
00:13:18,155 --> 00:13:20,100
سيتم إرفاق هذه السلسلة

187
00:13:20,100 --> 00:13:24,380
إلى كائن الخطأ إلى خاصية الرسالة لكائن الخطأ هنا.

188
00:13:24,380 --> 00:13:26,830
لذلك، في ملف index.js،

189
00:13:26,830 --> 00:13:30,090
لذلك أنا استرداد خاصية الرسالة من كائن الخطأ

190
00:13:30,090 --> 00:13:33,755
ثم طباعتها على وحدة التحكم الخاصة بي هنا.

191
00:13:33,755 --> 00:13:35,310
لذلك في حالة حدوث خطأ،

192
00:13:35,310 --> 00:13:39,215
سأقوم بطباعة رسالة الخطأ باستخدام هذا.

193
00:13:39,215 --> 00:13:45,820
وهكذا، هذه هي الطريقة التي يمكنني التعامل مع الخطأ الذي تم إرجاعه بواسطة وظيفة رد اتصال.

194
00:13:45,820 --> 00:13:51,360
خلاف ذلك، بالطبع في هذه الحالة،

195
00:13:51,360 --> 00:13:57,450
أعادت وحدة المستطيل وظيفة المستطيل،

196
00:13:57,450 --> 00:14:01,620
الكائن الذي يحتوي على محيط وظائف المنطقة،

197
00:14:01,620 --> 00:14:08,108
حتى أتمكن من المضي قدما وطباعة تلك القيمة.

198
00:14:08,108 --> 00:14:14,175
حتى هنا, سأقول مساحة المستطيل

199
00:14:14,175 --> 00:14:23,030
من أبعاد ل يساوي,

200
00:14:23,140 --> 00:14:28,270
لذلك سأقول,

201
00:14:29,170 --> 00:14:37,155
و ب يساوي.

202
00:14:37,155 --> 00:14:40,530
السبب الذي يجعلني أعرفه

203
00:14:40,530 --> 00:14:47,340
بشكل صريح سيصبح واضحًا جدًا عند تشغيل هذا المثال.

204
00:14:47,340 --> 00:15:01,480
سأقول هو المستطيل. المنطقة.

205
00:15:01,480 --> 00:15:04,188
الآن، لاحظ أنه بالنسبة لهذه المنطقة،

206
00:15:04,188 --> 00:15:09,555
أنا لا أرسل أي معلمات هنا لأنه يذهب إلى القيم،

207
00:15:09,555 --> 00:15:14,540
وقد تم تمرير الطول والتنفس بالفعل هنا في l و b،

208
00:15:14,540 --> 00:15:19,065
وتلك ستكون متاحة بالفعل لهذا

209
00:15:19,065 --> 00:15:24,245
وهنا بسبب الإغلاق الذي يدعم جافا سكريبت.

210
00:15:24,245 --> 00:15:27,470
لأن هذه x و y قد جاءتا كمعلمات،

211
00:15:27,470 --> 00:15:32,710
بحيث يمكن الوصول إليها هناك في وظيفة رد الاتصال هذه.

212
00:15:32,710 --> 00:15:37,315
لذلك سوف تكون هذه x_y متاحة تلقائيا بالنسبة لنا هنا.

213
00:15:37,315 --> 00:15:39,890
لذا، في الواقع،

214
00:15:39,890 --> 00:15:43,970
لست بحاجة إلى توفير هذه المعلمات x و y هنا على الإطلاق لأن

215
00:15:43,970 --> 00:15:49,090
تلك x و y سيتم استردادها من هذا x و y هناك.

216
00:15:49,090 --> 00:15:53,375
لذلك لا أحتاج حتى إلى تمرير هاتين القيمتين هنا.

217
00:15:53,375 --> 00:15:55,385
لهذا السبب، هناك حق،

218
00:15:55,385 --> 00:15:57,905
يمكنني استدعاء المستطيل.

219
00:15:57,905 --> 00:16:03,170
وسيحصل حساب المنطقة هذا تلقائيًا على l و b التي تم تمريرها

220
00:16:03,170 --> 00:16:09,505
بواسطة استدعاء المستطيل إلى وحدة العقدة المباشرة في وقت سابق.

221
00:16:09,505 --> 00:16:14,980
لذلك هذا هو إغلاق جافا سكريبت العاملة هنا.

222
00:16:14,980 --> 00:16:17,945
لذا، هذا هو أول واحد.

223
00:16:17,945 --> 00:16:23,305
أنا طباعة مساحة المستطيل.

224
00:16:23,305 --> 00:16:32,990
نفس الشيء، اسمحوا لي أيضا طباعة محيط.

225
00:16:32,990 --> 00:16:34,608
لذلك لطباعة محيط،

226
00:16:34,608 --> 00:16:36,720
لذلك سأقول console.log.

227
00:16:36,720 --> 00:16:46,560
محيط المستطيل سيكون محيط مستطيل.

228
00:16:46,560 --> 00:16:53,280
الآن، يجب أن أقول لكم أن هذا النوع من النهج للتنفيذ يأخذ القليل

229
00:16:53,280 --> 00:17:02,335
من الجهد لفهم واستيعاب القدرة الوظيفية غير المتزامنة.

230
00:17:02,335 --> 00:17:06,360
يستغرق بعض الوقت بالنسبة لك لفهم تماما كيف يعمل حقا.

231
00:17:06,360 --> 00:17:08,550
الآن لتوضيح حقيقة أن

232
00:17:08,550 --> 00:17:14,642
استدعاء الدالة هذه سيؤدي إلى استدعاء وحدة العقدة

233
00:17:14,642 --> 00:17:19,280
ولكن سيتم تنفيذ هذا الجزء فقط بعد

234
00:17:19,280 --> 00:17:24,830
تأخير ثانيتين بسبب حقيقة أننا نستخدم علامة الوقت المحددة.

235
00:17:24,830 --> 00:17:28,745
الآن، كما درسنا في عملية غير متزامنة،

236
00:17:28,745 --> 00:17:33,155
لأننا انتقلنا من المعالجة إلى الخلف،

237
00:17:33,155 --> 00:17:41,420
دعوني أيضًا أعرض console.log آخر هنا لتوضيح نقطة.

238
00:17:41,420 --> 00:17:46,175
لذلك سنقول أن هذا البيان هو

239
00:17:46,175 --> 00:17:53,869
بعد الدعوة إلى rect.

240
00:17:53,869 --> 00:18:00,210
السبب في أنني أوضح هذه النقطة هو أنه عند إصدار هذه المكالمة،

241
00:18:00,210 --> 00:18:06,130
لن يتم تنفيذ هذا الرمز حتى بعد تأخير ثانيتين.

242
00:18:06,130 --> 00:18:10,360
لذلك، في هذه الأثناء،

243
00:18:10,360 --> 00:18:16,340
سوف تستمر وظيفتك، الوظيفة الرئيسية هنا، ثم تنفيذ السطر التالي من التعليمات البرمجية التي تراها هنا.

244
00:18:16,340 --> 00:18:19,745
إذن هذا هو الاستمرارية التي سترونها هنا.

245
00:18:19,745 --> 00:18:21,805
لذلك، مع هذه التغييرات،

246
00:18:21,805 --> 00:18:27,815
دعونا حفظ التغييرات ثم ننظر في كيفية تنفيذ هذا التطبيق الآن.

247
00:18:27,815 --> 00:18:29,410
لذلك حفظ التغييرات.

248
00:18:29,410 --> 00:18:35,220
دعونا نذهب إلى المحطة وتنفيذ هذا التطبيق العقدة.

249
00:18:35,220 --> 00:18:37,570
الآن، والذهاب إلى المحطة، إضافة المطالبة.

250
00:18:37,570 --> 00:18:43,795
اسمحوا لي أن اكتب npm start وستلاحظ على الفور

251
00:18:43,795 --> 00:18:51,790
أن الحل وهذا البيان تم طباعته في وقت سابق.

252
00:18:51,790 --> 00:18:54,505
ثم بعد هذا التأخير المحدد،

253
00:18:54,505 --> 00:18:57,855
تم طباعة المنطقة والمحيط بها.

254
00:18:57,855 --> 00:19:02,130
لذلك هذا هو تأخير لمدة ثانيتين التي قدمناها باستخدام الوقت المحدد.

255
00:19:02,130 --> 00:19:05,755
لذلك، لاحظت أنه في الإصدار السابق،

256
00:19:05,755 --> 00:19:10,290
تم طباعة هذا وعلى الفور تم طباعة المنطقة والمحيط أسفل ذلك مباشرة.

257
00:19:10,290 --> 00:19:15,120
ولكن الآن، لاحظ أن هذه القيم تتم طباعتها بعد ذلك بقليل.

258
00:19:15,120 --> 00:19:20,460
حتى بين، استدعاء وظيفتها مع المعلمات المختلفة التي ذهبت بالفعل

259
00:19:20,460 --> 00:19:26,505
في ومن ثم يتم استدعاء الاستدعاءات مرة أخرى بعد اثنين من التأخير الثاني لكل واحد منهم.

260
00:19:26,505 --> 00:19:32,500
وبسبب حقيقة أن هناك الإغلاق الذي تدعمه جافا سكريبت،

261
00:19:32,500 --> 00:19:35,980
لذلك يتم الحفاظ على القيم التي يتم تمريرها.

262
00:19:35,980 --> 00:19:38,440
وهكذا عندما يتم استدعاء وظيفة رد الاتصال،

263
00:19:38,440 --> 00:19:40,615
تتم طباعة القيمة المناسبة.

264
00:19:40,615 --> 00:19:42,730
لذلك هذا هو السبب في أن ترى أن المنطقة

265
00:19:42,730 --> 00:19:46,330
ومحيط تتم طباعتها بشكل صحيح وهؤلاء الاثنين

266
00:19:46,330 --> 00:19:48,070
هنا, هذه التصريحات اثنين هنا,

267
00:19:48,070 --> 00:19:51,340
تتوافق

268
00:19:51,340 --> 00:19:55,100
مع هذه الدعوة معينة إلى مباشرة مع l يساوي اثنين وب يساوي أربعة.

269
00:19:55,100 --> 00:19:56,605
ثم هذان الإثنان،

270
00:19:56,605 --> 00:19:58,150
بجانب اثنين، بطبيعة الحال،

271
00:19:58,150 --> 00:20:05,000
تتوافق مع هذا معين والباقي منها كما ترون هنا.

272
00:20:05,000 --> 00:20:10,410
لذا، ما أردت توضيحه هو حقيقة أنه عند إجراء حساب غير متزامن،

273
00:20:10,410 --> 00:20:12,730
يأخذ الحساب غير المتزامن وقته الخاص

274
00:20:12,730 --> 00:20:16,270
لإرجاع القيمة بينما

275
00:20:16,270 --> 00:20:22,460
سيمضي الحساب الرئيسي إلى الأمام دون انتظار اكتمال الاستدعاء.

276
00:20:22,460 --> 00:20:25,245
لذلك، عندما تحتاج إلى القيام بقدر معين من العمل،

277
00:20:25,245 --> 00:20:29,365
قمت بتمريرها كرد اتصال إلى تلك الوحدة الأخرى.

278
00:20:29,365 --> 00:20:31,375
وعندما تكمل هذه الوحدة الأخرى عملها،

279
00:20:31,375 --> 00:20:35,010
فستتم معاودة الاتصال ثم سيتم تنفيذ هذا الرمز.

280
00:20:35,010 --> 00:20:40,350
إذن هذه هي النقطة التي أظهرتها باستخدام هذا المثال.

281
00:20:40,350 --> 00:20:41,565
مرة أخرى، كما قلت،

282
00:20:41,565 --> 00:20:45,210
وهذا يأخذ قليلا من الخيال والتفاهم

283
00:20:45,210 --> 00:20:48,930
بالنسبة لك لاستيعاب الطريقة التي يعمل بها هذا،

284
00:20:48,930 --> 00:20:55,185
ولكن سترى أنه مع عقدة وأيضا إكسبريس وعندما نستخدم مونغودب،

285
00:20:55,185 --> 00:21:01,785
سترى هذا النوع من النمط تكرار في كثير من الأحيان في الطريقة التي نكتب بها رمزنا.

286
00:21:01,785 --> 00:21:06,210
لذلك مع هذا التوضيح البسيط من الاستدعاءات ومعالجة الأخطاء،

287
00:21:06,210 --> 00:21:08,940
نكمل هذا التمرين.

288
00:21:08,940 --> 00:21:13,675
هذا هو الوقت المناسب بالنسبة لك للقيام بتعليق الحصول على هذه الرسالة،

289
00:21:13,675 --> 00:21:17,700
والعقدة، وعمليات الاسترجاعات، ومعالجة الأخطاء.