درک وعده های جاوا اسکریپت – انجمن DEV
در برنامه نویسی ناهمزمان مدرن، وعده ها نقش مهمی در مدیریت پیچیدگی مدیریت عملیات ناهمزمان دارند.
بهعنوان توسعهدهنده، ما اغلب با سناریوهایی مواجه میشویم که در آن وظایف به زمان نیاز دارند، مانند واکشی دادهها از سرورها یا برقراری تماسهای API. Promises یک رویکرد ساختاریافته برای مقابله با این موقعیت ها ارائه می دهد و کد را خواناتر، قابل نگهداری و کارآمدتر می کند.
کشورهای موعود:
یک قول می تواند در یکی از سه حالت وجود داشته باشد: در حال انتظار، محقق شده یا رد شده.
انتظار: این حالت اولیه هنگام ایجاد یک وعده است. این نشان دهنده زمان بین ایجاد وعده و نقطه ای است که یا محقق می شود یا رد می شود.
برآورده شد: گفته می شود که یک وعده زمانی محقق می شود که عملیات ناهمزمان آن با موفقیت تکمیل شود. به این معنی است که نتیجه وعده داده شده در دسترس است و وعده با مقدار حل شده به این حالت منتقل می شود.
رد شد: اگر عملیات ناهمزمان با خطا مواجه شود، یک قول رد می شود. در این حالت، وعده به حالت رد شده منتقل می شود و دلیل رد را ارائه می دهد که معمولاً یک شی خطا است.
نحوه رسیدگی به وعده ها
درک وعده ها و دانستن نحوه رسیدگی به آنها هنگام برخورد با عملیات ناهمزمان در برنامه ها و پروژه های شما بسیار مهم است. Promises به شما امکان می دهد تا تماس های ناهمزمان را به طور موثر مدیریت کنید و اطمینان حاصل کنید که کد شما تعاملی و پاسخگو باقی می ماند.
دو روش اصلی برای رسیدگی به وعده ها وجود دارد:
1. Async/Await
یکی از ویژگی های قابل توجه معرفی شده در نحو به روز شده جاوا اسکریپت ES6 (ECMAScript 2015) Async/Await است. این رویکرد کد ناهمزمان را ساده می کند و آن را خواناتر می کند.
نحوه عملکرد Async/Await:
شما یک تابع ایجاد می کنید که یک کار ناهمزمان را ایجاد می کند و از کلمه کلیدی async قبل از اعلان تابع استفاده می کند. این نشان می دهد که تابع حاوی کد ناهمزمان خواهد بود. در داخل تابع، از کلمه کلیدی await قبل از وعده استفاده می کنید. این دستور به کد دستور می دهد تا اجرا را متوقف کند تا زمانی که وعده نتیجه ای را برگرداند و اطمینان حاصل کند که خطوط بعدی کد در تابع اجرا نمی شوند تا زمانی که نتیجه قول در دسترس باشد.
در اینجا یک مثال است:
کد ارائه شده از یک نقطه پایانی برای واکشی داده ها از طریق فراخوانی تابع استفاده می کند. تابع با کلمه کلیدی async علامت گذاری شده است، که نشان می دهد یک تابع ناهمزمان است و می تواند کلمه کلیدی await را درون آن به کار گیرد. در بلوک کد، از روش انتظار برای برقراری تماس استفاده می شود.
** 2. then()**
این روش معمولاً با وعدههایی استفاده میشود تا مشخص شود پس از حل و فصل وعده (با موفقیت تکمیل) چه اتفاقی باید بیفتد. تابعی را به عنوان آرگومان می گیرد که وقتی وعده حل شد اجرا می شود. این به شما امکان می دهد تا اقدامات زنجیره ای را پس از تحقق وعده انجام دهید. بنابراین، قبل از اجرای خطوط دیگر کد منتظر رفع یا رد شدن قول نباشید.
در اینجا یک مثال است:
در این بلوک کد به روز شده، رویکرد ما برای رسیدگی به وعده ها تغییر کرده است. به جای استفاده از async/await، از دستور .then() برای رسیدگی به وعده ها استفاده می کنیم. این روش به ما اجازه می دهد تا دنباله ای از اقدامات را تعریف کنیم که باید با حل شدن وعده ها انجام شوند.
تفاوت عملی بین “Aync Await” و “.then”
حالا بیایید به تفاوت های عملی بین دو روش رسیدگی به وعده ها بپردازیم
بیایید این بلوک کد را اجرا کنیم:
وقتی این کد را اجرا می کنیم متوجه چیز جالبی شدیم و این سلسله مراتب نحوه اجرای کد ما است. اگر کنسول خود را بررسی کنیم، چیزی شبیه به این دریافت می کنیم:
ما به وضوح میبینیم که «من اول آمدم» ابتدا قبل از نتیجه واقعی از API اجرا شد. که ما را به آنچه قبلاً بحث کردیم برمیگرداند، وقتی میگوییم با استفاده از نحو «.then» منتظر قول نمیمانیم، در عوض به آن خط عمل میدهیم تا هنگام بازگشت آن را انجام دهد که در مورد ما از خود خواسته بودیم. کد به console.log پاسخ داده شده توسط وعده ما.
حالا بیایید این بلوک کد را اجرا کنیم:
حالا بیایید ببینیم چه چیزی در کنسول خود داریم
عالی. اکنون اطلاعات ثبت شده کنسول به ترتیب مناسب چاپ شده است. که کشف قبلی ما را تأیید میکند، که انتظار Async، بلوک کد دیگری را اجرا نمیکند تا زمانی که پاسخی را از قول ما که حل شده یا رد شده است، دریافت نکند.
بنابراین یک بسته بندی است. امیدوارم بتوانیم درک کنیم که وعده ها در جاوا اسکریپت چگونه کار می کنند و چگونه آنها را به درستی مدیریت کنیم.