You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
```` warn header="لا يمكن استخدام` انتظار 'في الوظائف العادية "
76
76
إذا حاولنا استخدام `` انتظار '' في وظيفة غير متزامنة ، فسيكون هناك خطأ في بناء الجملة:
77
77
78
78
@@ -86,7 +86,7 @@ function f() {
86
86
```
87
87
88
88
سنحصل على هذا الخطأ إذا لم نضع `async` قبل دالة. كما ذكر ، يعمل `` انتظار '' فقط داخل `وظيفة غير متزامنة`.
89
-
````
89
+
````
90
90
91
91
لنأخذ مثال `showAvatar ()` من الفصل <info: prom-chaining> ونعيد كتابته باستخدام `async / await`:
92
92
@@ -123,7 +123,7 @@ showAvatar();
123
123
124
124
نظيفة جدا وسهلة القراءة ، أليس كذلك؟ أفضل بكثير من ذي قبل.
125
125
126
-
````smart header = "``انتظار '' لن يعمل في رمز المستوى الأعلى"
126
+
````smart header="` `انتظار '' لن يعمل في رمز المستوى الأعلى"
127
127
يميل الأشخاص الذين بدأوا للتو في استخدام `` انتظار '' إلى نسيان حقيقة أنه لا يمكننا استخدام `` انتظار '' في رمز المستوى الأعلى. على سبيل المثال ، لن يعمل هذا:
128
128
129
129
```js run
@@ -141,10 +141,9 @@ But we can wrap it into an anonymous async function, like this:
مثل "prom.then`" ، يتيح لنا "await" استخدام العناصر القابلة للاستعمال (تلك التي تستخدم طريقة `ثم` القابلة للاستدعاء). الفكرة هي أن كائن طرف ثالث قد لا يكون وعدًا ، ولكنه متوافق مع الوعد: إذا كان يدعم `.then` ، فهذا يكفي لاستخدامه مع` `بانتظار ''.
149
148
150
149
إليك فئة `` Thenable` التجريبية ؛ تقبل "الانتظار" أدناه حالاتها:
@@ -171,9 +170,9 @@ f();
171
170
```
172
171
173
172
إذا حصل `await` على كائن غير مبشر باستخدام` .then` ، فإنه يستدعي هذه الطريقة التي توفر الوظائف المضمنة `حل 'و'رفض` كوسيطات (تمامًا مثلما يفعل لمنفذ` وعد عادي'). ثم تنتظر `انتظار 'حتى يتم استدعاء أحدهم (في المثال أعلاه يحدث في السطر` (*) `) ثم يواصل النتيجة.
174
-
````
173
+
````
175
174
176
-
"" smart header = "أساليب فئة Async"
175
+
````smart header="أساليب فئة Async"
177
176
للإعلان عن أسلوب فئة غير متزامن ، ما عليك سوى إلحاقها بـ `غير متزامن ':
إذا نسينا إضافة ".catch" هناك ، فإننا نتلقى خطأ وعد غير معالج (قابل للعرض في وحدة التحكم). يمكننا اكتشاف مثل هذه الأخطاء باستخدام معالج الأحداث `unhandledrejection` العالمي كما هو موضح في الفصل <info: prom-error-handling>.
عندما نستخدم "غير متزامن / انتظار" ، نادرًا ما نحتاج إلى ". ثم" ، لأن "انتظار" يتعامل مع الانتظار. ويمكننا استخدام 'try..catch` العادية بدلاً من `.atch'. هذا عادة (ولكن ليس دائما) أكثر ملاءمة.
273
272
274
273
ولكن في المستوى العلوي من الشفرة ، عندما نكون خارج أي وظيفة "غير متزامن" ، يتعذر علينا استخدام "انتظار" من الناحية النحوية ، لذلك من المعتاد إضافة ".then / catch" للتعامل مع النتيجة النهائية أو خطأ السقوط ، كما هو الحال في السطر `(*)` من المثال أعلاه.
275
-
``
274
+
```
276
275
277
-
"``smart header=" `async / await` يعمل بشكل جيد مع" Promise.all` "
276
+
```smart header=" `async / await` يعمل بشكل جيد مع" Promise.all` "
278
277
عندما نحتاج إلى انتظار وعود متعددة ، يمكننا أن نلفها في "Promise.all" ثم "انتظر":
279
278
280
279
```js
@@ -288,7 +287,7 @@ let results = await Promise.all([
288
287
289
288
في حالة وجود خطأ ، يتم نشره كالمعتاد ، من الوعد الفاشل إلى "Promise.all" ، ثم يصبح استثناء يمكننا التقاطه باستخدام "try..catch" حول المكالمة.
290
289
291
-
````
290
+
````
292
291
293
292
## ملخص
294
293
@@ -304,4 +303,4 @@ let results = await Promise.all([
304
303
305
304
يوفرون معًا إطارًا رائعًا لكتابة رمز غير متزامن يسهل قراءته وكتابته.
306
305
307
-
باستخدام "غير متزامن / انتظار" ، نادرًا ما نحتاج إلى كتابة "وعد. ثم / التقاط" ، ولكن لا يزال يتعين علينا ألا ننسى أنها تستند إلى الوعود ، لأنه في بعض الأحيان (على سبيل المثال في النطاق الخارجي) علينا استخدام هذه الأساليب. كما أن "Promise.all" جميل عندما ننتظر العديد من المهام في وقت واحد.
306
+
باستخدام "غير متزامن / انتظار" ، نادرًا ما نحتاج إلى كتابة "وعد. ثم / التقاط" ، ولكن لا يزال يتعين علينا ألا ننسى أنها تستند إلى الوعود ، لأنه في بعض الأحيان (على سبيل المثال في النطاق الخارجي) علينا استخدام هذه الأساليب. كما أن "Promise.all" جميل عندما ننتظر العديد من المهام في وقت واحد.
من السهل أيضًا رؤية ذلك عن طريق إخراج عنصر باستخدام "console.dir (elem)" في المستعرض. هناك في وحدة التحكم يمكنك مشاهدة `HTMLElement.prototype` و` Element.prototype` وما إلى ذلك.
تدعم معظم المتصفحات أمرين في أدوات المطورين الخاصة بهم: `console.log` و` console.dir`. يخرجون حججهم إلى وحدة التحكم. بالنسبة لكائنات JavaScript ، تقوم هذه الأوامر بنفس الشيء.
Copy file name to clipboardExpand all lines: 2-ui/1-document/10-size-and-scroll-window/article.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,13 +30,13 @@ alert( document.documentElement.clientWidth ); // window width minus the scrollb
30
30
```
31
31
32
32
في معظم الحالات ، نحتاج إلى عرض النافذة * المتوفرة *: لرسم شيء ما أو وضعه. هذا هو: داخل أشرطة التمرير إذا كان هناك أي. لذا يجب علينا استخدام `documentElement.clientHeight / Width`.
33
-
````
33
+
````
34
34
35
-
```warn header=" "DOCTYPE` مهم"
35
+
````warn header=" "DOCTYPE` مهم"
36
36
يرجى ملاحظة: قد تعمل خصائص الهندسة عالية المستوى بشكل مختلف قليلاً عندما لا يكون هناك <! DOCTYPE HTML> `في HTML. الأشياء الغريبة ممكنة.
Copy file name to clipboardExpand all lines: 9-regular-expressions/11-regexp-groups/article.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -163,11 +163,11 @@ alert( match[2] ); // c
163
163
164
164
## البحث عن جميع التطابقات مع المجموعات: matchAll
165
165
166
-
```warn header=" "matchAll` هي طريقة جديدة ، قد تكون هناك حاجة إلى تعبئة متعددة"
166
+
```warn header=" `matchAll` هي طريقة جديدة ، قد تكون هناك حاجة إلى تعبئة متعددة"
167
167
الطريقة `matchAll` غير مدعومة في المتصفحات القديمة.
168
168
169
169
قد تكون هناك حاجة إلى تعبئة متعددة ، مثل <https://github.com/ljharb/String.prototype.matchAll>.
170
-
``
170
+
```
171
171
172
172
عندما نبحث عن جميع التطابقات (الإبلاغ عن `pattern: g`) ، لا تُرجع طريقة` match` محتويات المجموعات.
173
173
@@ -361,4 +361,4 @@ alert( result.length ); // 2 (no more items in the array)
361
361
362
362
يمكننا أيضًا استخدام محتويات الأقواس في سلسلة الاستبدال في `str.replace`: بالرقم` $ n` أو بالاسم `$ <name>`.
363
363
364
-
يمكن استبعاد مجموعة من الترقيم عن طريق إضافة "pattern:؟:" في بدايتها. يُستخدم هذا عندما نحتاج إلى تطبيق مُحدِّد الكمية على المجموعة بأكملها ، ولكن لا نريدها كبند منفصل في صفيف النتائج. لا يمكننا أيضًا الإشارة إلى هذه الأقواس في سلسلة الاستبدال.
364
+
يمكن استبعاد مجموعة من الترقيم عن طريق إضافة "pattern:؟:" في بدايتها. يُستخدم هذا عندما نحتاج إلى تطبيق مُحدِّد الكمية على المجموعة بأكملها ، ولكن لا نريدها كبند منفصل في صفيف النتائج. لا يمكننا أيضًا الإشارة إلى هذه الأقواس في سلسلة الاستبدال.
0 commit comments