javascriptasync / awaitasync و await در جاوااسکریپت
async و await در جاوااسکریپت چگونه کار میکنند؟ ارتباط با Promise، تعلیق ادامهٔ تابع، مدیریت خطا و تفاوت انتظار ترتیبی و کار مستقل را یاد بگیرید.
مفهوم به زبان ساده
async و await راهی خواناتر برای کار با #promise هستند. فراخوانی تابع async همیشه یک Promise برمیگرداند؛ حتی اگر در بدنه یک مقدار معمولی return کنید.
await ادامهٔ همان تابع را تا تعیین تکلیف مقدار منتظرشده معلق میکند. کل برنامه یا نخ اصلی را برای انتظار متوقف نمیکند. البته محاسبهٔ سنگین همگام همچنان میتواند اجرای JavaScript را اشغال کند.
اگر Promise رد شود، await در همان نقطه خطا ایجاد میکند؛ بنابراین try/catch برای مدیریت آن کاربرد دارد. استفادهٔ پیاپی از await کارها را پشت سر هم میکند؛ برای کارهای مستقل میتوان Promise.all را بررسی کرد.
کجا به کار میآید؟
- نوشتن مراحل دریافت و پردازش داده با ترتیب روشن
- مدیریت خطاهای چند مرحلهٔ ناهمگام در یک try/catch
از تعریف تا یک مثال واقعی
async function run() {
try {
const text = await Promise.resolve("done");
console.log(text);
} catch (error) {
console.error(error);
}
}
run();
done
این مثال چطور کار میکند؟
async باعث میشود run یک Promise برگرداند.
await مقدار done را از Promise موفق میگیرد و ادامهٔ تابع را از همان نقطه از سر میگیرد.
console.log نتیجه را نمایش میدهد؛ در صورت ردشدن، کنترل به catch میرود.
اشتباه رایج
await را داخل تابع async یا در سطح بالای یک ماژولِ پشتیبانیشده به کار ببرید. افزودن async نیز یک محاسبهٔ سنگین را خودکار به کار پسزمینه تبدیل نمیکند.
این را به خاطر بسپارید
await خوانایی کنترل جریان را بهتر میکند؛ وابستگی و مدیریت خطا همچنان مسئولیت شماست.