آموزش جاوا اسکریپت پیشرفته : نحوه پیادهسازی یک API مبتنی بر promise
در مقاله قبلی در مورد نحوه استفاده از APIهایی که promiseها را برمیگردانند بحث کردیم. در این مقاله به جنبه دیگر آن خواهیم پرداخت - نحوه پیادهسازی APIهایی که promiseها را برمیگردانند. این کار نسبت به استفاده از APIهای مبتنی بر promise بسیار کمتر رایج است، اما هنوز هم ارزش دانستن دارد.
به طور کلی، وقتی یک API مبتنی بر promise را پیادهسازی میکنید، یک عملیات ناهمزمان را پوشش میدهید که ممکن است از رویدادها، یا callbackهای ساده یا یک مدل ارسال پیام استفاده کند. شما یک شیء Promise را ترتیب میدهید تا موفقیت یا شکست آن عملیات را به درستی مدیریت کند.
پیادهسازی API مربوط به alarm
در این مثال، ما یک API هشدار مبتنی بر promise به نام پیادهسازی خواهیم کرد. این API نام فردی که باید بیدار شود و یک تأخیر بر حسب میلیثانیه برای بیدار کردن فرد را به عنوان ورودی دریافت میکند. پس از تأخیر، تابع یک پیام "Wake up!" ارسال میکند که شامل نام فردی است که باید بیدار شود.
ما از API مربوط به برای پیادهسازی تابع استفاده خواهیم کرد. API مربوط به یک تابع callback و یک delay (تاخیر) به میلیثانیه را به عنوان آرگومان دریافت میکند. وقتی فراخوانی میشود، یک تایمر تنظیم شده با تاخیر داده شده را شروع میکند و وقتی زمان به پایان رسید، تابع داده شده را فراخوانی میکند.
در مثال زیر، ما را با یک تابع callback و تاخیر ۱۰۰۰ میلیثانیه فراخوانی میکنیم:
تابع ما یک Promise برمیگرداند که با انقضای تایمر، اجرا میشود. این تابع یک پیام "Wake up!" را به تابع ارسال میکند و در صورت اعمال مقدار تأخیر منفی توسط فراخوانیکننده، promise را رد میکند.
جزء کلیدی در اینجا سازنده است. سازنده یک تابع واحد را به عنوان آرگومان میگیرد. ما این تابع را executor مینامیم. وقتی یک promise جدید ایجاد میکنید، پیادهسازی executor را ارائه میدهید.
این تابع executor خود دو آرگومان میگیرد که هر دو تابع هستند و معمولاً resolve و reject نامیده میشوند. در پیادهسازی executor، تابع ناهمزمان زیرین را فراخوانی میکنید. اگر تابع ناهمزمان موفق شود، resolve را فراخوانی میکنید و اگر شکست بخورد، reject را فراخوانی میکنید. اگر تابع executor خطایی ایجاد کند، reject به طور خودکار فراخوانی میشود. میتوانید یک پارامتر واحد از هر نوعی را به resolve و reject ارسال کنید.
بنابراین میتوانیم را به این صورت پیادهسازی کنیم:
- این تابع یک Promise جدید ایجاد و برمیگرداند. درون اجراکنندهی promise، ما:
- بررسی میکنیم که delay منفی نباشد، و reject را فراخوانی میکنیم، در صورت منفی بودن، یک خطای سفارشی ارسال میکنیم.
را فراخوانی میکنیم، یک callback و delay ارسال میکنیم. callback زمانی فراخوانی میشود که تایمر منقضی شود، و در callback، resolve را فراخوانی میکنیم و پیام "Wake up!" خود را ارسال میکنیم.
استفاده از API مربوط به alarm
این بخش باید از مقاله قبلی کاملاً برایتان آشنا باشد. میتوانیم تابع را فراخوانی کنیم و در promise برگشتی، تابع و را برای تنظیم کنترلکنندههایی برای انجام و رد promise فراخوانی کنیم.
سعی کنید مقادیر مختلفی برای "Name" و "Delay" تنظیم کنید. سعی کنید برای "Delay" یک مقدار منفی تنظیم کنید.
استفاده از async و await با API مربوط به alarm
از آنجایی که یک Promise برمیگرداند، میتوانیم هر کاری را که با هر Promise دیگری انجام میدادیم، با آن انجام دهیم: زنجیرهسازی ، و :