الانتقال إلى المحتوى الرئيسي
الوحدة 7 · الدرس 2 من 426/32 في الدورة~12 min
دروس الوحدة (2/4)

غير متزامن / في انتظار

async/await عبارة عن صيغة أكثر وضوحًا للعمل مع Promises: الكود ** يقرأ هكذا رمز متزامن**، ولكنه يستخدم خلف الكواليس نفس الوعود تمامًا مثل الدرس السابق.

محمي_INLINE_5

دالة تم تعريفها بـ async دائمًا تُرجع وعدًا.

JS
async function forty() {
  return 40;
}

forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40

حتى إذا قمت بإرجاع قيمة "عادية"، فإن الدالة تقوم بتغليفها في وعد تم حله.

محمي_INLINE_7

داخل async function يمكنك وضع await قبل الوعد: التنفيذ متوقف مؤقتًا حتى يستقر الوعد، ثم يستمر بالقيمة التي تم حلها.

JS
async function sum() {
  const a = await Promise.resolve(10);
  const b = await Promise.resolve(20);
  return a + b; // 30
}

مكافئ بأسلوب .then (أكثر تفصيلاً):

JS
function sum() {
  return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}

await ينشر الأخطاء

إذا تم رفض الوعد، فسيعيد await الخطأ. يمكنك اللحاق به بشكل طبيعي محمي_INLINE_13:

JS
async function read() {
  try {
    const x = await Promise.reject(new Error('no'));
    return x;
  } catch (err) {
    return 'error: ' + err.message;
  }
}

read(); // Promise { 'error: no' }

سهم غير متزامن

JS
const double = async (n) => n * 2;
double(5); // Promise { 10 }

جربه

تمرين#js.m7.l2.e1
المحاولات: 0جارٍ التحميل…

حدد `وظيفة غير متزامنة addOne(p)` التي تتلقى وعدًا برقم وترجع (كوعد) الرقم + 1. استخدم الانتظار.

جارٍ تحميل المحرر…
إظهار التلميح

const n = انتظار p؛ العودة ن + 1؛

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#js.m7.l2.e2
المحاولات: 0جارٍ التحميل…

تحديد `sumTwo(pa, pb)` غير متزامن: يتلقى وعدين بالأرقام، ويعيد مجموعهما. استخدم انتظارين متسلسلين.

جارٍ تحميل المحرر…
إظهار التلميح

انتظر كل واحد، ثم قم بإرجاع a + b.

الحل متاح بعد 3 من المحاولات