Async / Await

در جاوااسکریپت، Async / Await یک روش ساده و خوانا برای نوشتن کدهای غیرهمزمان (Asynchronous) هست.
با کمک آن می‌توان Promiseها را به صورت کدی شبیه همزمان (Synchronous) نوشت و مدیریت کرد.

🔹 تعریف Async Function

تابعی که با کلمه کلیدی async تعریف می‌شود، همیشه یک Promise برمی‌گرداند.

async function greet() { return "Hello"; } greet().then(result => console.log(result));

📌 خروجی:

Hello

🔹 استفاده از Await

  • await فقط داخل async function قابل استفاده است.

  • باعث می‌شود که اجرای کد منتظر تکمیل Promise بماند و سپس ادامه پیدا کند.

function wait(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function sayHello() { console.log("Start"); await wait(2000); // منتظر 2 ثانیه console.log("Hello after 2 seconds"); } sayHello();

📌 خروجی بعد از 2 ثانیه:

Start Hello after 2 seconds

🔹 مدیریت خطا با try / catch

async function fetchData() { try { let response = await fetch("https://jsonplaceholder.typicode.com/posts/1"); let data = await response.json(); console.log(data); } catch (error) { console.log("Error:", error); } } fetchData();
  • با استفاده از try / catch می‌توان خطاهای Promise را به راحتی مدیریت کرد.

🔹 اجرای موازی Promiseها

گاهی می‌خواهیم چند Promise همزمان اجرا بشن و سپس منتظر تمام اون‌ها باشیم:

async function getData() { const [res1, res2] = await Promise.all([ fetch("https://jsonplaceholder.typicode.com/posts/1"), fetch("https://jsonplaceholder.typicode.com/posts/2") ]); console.log(await res1.json(), await res2.json()); } getData();

✅ خلاصه

  • async → تابع را به Promise تبدیل می‌کند.

  • await → منتظر تکمیل یک Promise می‌ماند و نتیجه را برمی‌گرداند.

  • try / catch → مدیریت خطاها در async functions

  • Promise.all() → اجرای موازی چند Promise و انتظار برای تمام آن‌ها

  • Async / Await خوانایی کدهای غیرهمزمان را بسیار افزایش می‌دهد و جایگزین Callbackها و زنجیره then() می‌شود.