سلام دوستان. ‌Promise که برای مدیریت کردن عملیات ناهمگام استفاده میشه، یکی از کاربردی‌ترین ویژگی‌های جاوااسکریپت هست که از ES6 به این زبان اضافه شده. توی این قسمت می‌خوایم این موضوع کاربردی رو بررسی کنیم.

توی این قسمت یاد می‌گیریم که:

 

مشکل کجاست؟ 🤔

ابتدا با مفهومی به اسم عملیات ناهمگام آشنا بشیم:

عملیات ناهمگام به عملیاتی گفته میشه جدا از روند اصلی برنامه پردازش میشه

توی جاوااسکریپت، تابع setTimeout یکی از معروف‌ترین مثال‌ها برای درک مفهوم عملیات ناهمگام هست. با این تابع می‌تونیم قطعه کدی رو بعد از یک تأخیر معین اجرا کنیم. کد زیر رو در نظر بگیرین:

setTimeout(function () {
  alert(1);
}, 2000);

alert(2);

ورودی اول setTimeout یک تابع هست و شامل عملیاتی میشه که می‌خوایم اون رو با تأخیر انجام بدیم. ورودی دوم مدت زمان تأخیر به میلی‌ثانیه هست. اینجا 2000 یعنی 2 ثانیه.

با زدن دکمه ► می‌بینیم که ابتدا alert خط ۵ نمایش داده میشه و بعد از ۲ ثانیه alert خط ۲. این یعنی یک عملیات ناهمگام داریم. شاید انتظار داشتیم که جاوااسکریپت خط به خط کدهای ما رو بررسی کنه و خروجی‌ها رو نمایش بده. اما وقتی که جاوااسکریپت به قسمتی از کد رسید که شامل یک عملیات ناهمگام بود، منتظر نتیجه این قسمت نموند و به ادامه بررسی خط‌های بعدی پرداخت.

توی جاوااسکریپت، یک سری عملیات مثل اتصال به یک منبع خارجی با Ajax و WebSocket و یا خوندن و نوشتن اطلاعات توی دیتابیس و هارددیسک، جدا از روند اصلی برنامه اجرا میشن. این یعنی عملیات ناهمگام.

چطوری می‌تونیم بعد از به پایان رسیدن یک عملیات ناهمگام کاری رو انجام بدیم؟ مثلاً توی کد بالا ابتدا صبر کنیم کار تابعی که به پاس دادیم تموم بشه و بعد با مقدار 2 رو بگیریم؟ باید راهی باشه که بتونیم عملیات ناهمگام رو مدیریت کنیم. با این کار رو می‌تونیم انجام بدیم 👌