دروس الوحدة (2/4)
غير متزامن / في انتظار
async/await عبارة عن صيغة أكثر وضوحًا للعمل مع Promises: الكود ** يقرأ هكذا
رمز متزامن**، ولكنه يستخدم خلف الكواليس نفس الوعود تمامًا مثل الدرس السابق.
محمي_INLINE_5
دالة تم تعريفها بـ async دائمًا تُرجع وعدًا.
async function forty() {
return 40;
}
forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40حتى إذا قمت بإرجاع قيمة "عادية"، فإن الدالة تقوم بتغليفها في وعد تم حله.
محمي_INLINE_7
داخل async function يمكنك وضع await قبل الوعد: التنفيذ متوقف مؤقتًا
حتى يستقر الوعد، ثم يستمر بالقيمة التي تم حلها.
async function sum() {
const a = await Promise.resolve(10);
const b = await Promise.resolve(20);
return a + b; // 30
}مكافئ بأسلوب .then (أكثر تفصيلاً):
function sum() {
return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}await ينشر الأخطاء
إذا تم رفض الوعد، فسيعيد await الخطأ. يمكنك اللحاق به بشكل طبيعي
محمي_INLINE_13:
async function read() {
try {
const x = await Promise.reject(new Error('no'));
return x;
} catch (err) {
return 'error: ' + err.message;
}
}
read(); // Promise { 'error: no' }سهم غير متزامن
const double = async (n) => n * 2;
double(5); // Promise { 10 }جربه
حدد `وظيفة غير متزامنة addOne(p)` التي تتلقى وعدًا برقم وترجع (كوعد) الرقم + 1. استخدم الانتظار.
إظهار التلميح
const n = انتظار p؛ العودة ن + 1؛
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
تحديد `sumTwo(pa, pb)` غير متزامن: يتلقى وعدين بالأرقام، ويعيد مجموعهما. استخدم انتظارين متسلسلين.
إظهار التلميح
انتظر كل واحد، ثم قم بإرجاع a + b.
الحل متاح بعد 3 من المحاولات