المعامل await في JavaScript

من موسوعة حسوب
مراجعة 04:06، 17 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

المعامل await يُستخدَم لانتظار وعد (الكائن Promise)، ويمكن أن يُستخدَم داخل دالة غير متزامنة فقط (async function).

البنية العامة

[rv] = await expression;

expression

كائن Promise أو أيّة قيمة يجب انتظارها.

rv

إعادة قيمة المُحققة للوعد (الكائن Promise)، أو القيمة نفسها إذا لم تكن وعدًا.

الوصف

التعبير await يؤدي إلى إيقاف تنفيذ دالة غير متزامنة (async function) ريثما يتحقق (fulfill) أو يُرفَض (reject) الوعد (الكائن Promise)، ويؤدي إلى استئناف تنفيذ الدالة غير المتزامنة بعد أن يتحقق الوعد، وعند استنئاف الدالة ستكون قيمة تعبير await هي القيمة المُحقَّقة للوعد (الكائن Promise).

إذا رُفِضَ الوعد، فسيرمي (throw) التعبير await القيمة المرفوضة.

إذا كانت قيمة التعبير الذي يلي المعامل await ليست وعدًا Promise، فستحوَّل إلى وعد باستخدام الدالة resolve()‎.

أمثلة

إذا مُرِّر كائن Promise إلى التعبير await، فسينتظر إلى أن يتحقق الوعد ويُعيد تلك القيمة:

function resolveAfter2Seconds(x) { 
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

async function f1() {
  var x = await resolveAfter2Seconds(10);
  console.log(x); // 10
}
f1();

أما إذا لم تكن القيمة كائنًا من النوع Promise، فستحوّل عبر الدالة resolve()‎. وسينتظر التعبير await الوعد حتى يتحقق:

async function f2() {
  var y = await 20;
  console.log(y); // 20
}
f2();

إذا رُفِضَ الوعد، فسترمى القيمة المرفوضة:

async function f3() {
  try {
    var z = await Promise.reject(30);
  } catch(e) {
    console.log(e); // 30
  }
}
f3();

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 55 52 غير مدعومة 42 10.1

على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.

مصادر ومواصفات