رهام رفیعی تهرانی
رهام رفیعی تهرانی
خواندن ۱ دقیقه·۲ سال پیش

تابع defer در rxjs چیست؟

دیروز داشتم یک نمونه کدی رو می خواندم، به تابع defer برخورد کردم. در موردش تحقیق کردم و متوجه شدم چه تابع جالب و پرکاربردیه.

خط زیر رو در نظر بگیرید:

هنگام اجرای این کد، بلافاصله و پیش از هر اتصال و درخواستی، یک Promsie ساخته میشه.


کد بالا چندان مشابه Observer رفتار نمیکنه. ممکنه ما در لحظه به یک Promise ساخته شده نیاز نداشته باشیم. زمانی که از defer استفاده میکنیم، در واقع یک بلاک کد رو آماده میکنیم و زمانی که یک Observable درخواست Observe بکنه.

کد تولید promise ساخته شده  ولی چون کسی subscribe نکرده هیچ Promise تولید نشده
کد تولید promise ساخته شده ولی چون کسی subscribe نکرده هیچ Promise تولید نشده


پرامیس ساخته شده و برگردانده میشود
پرامیس ساخته شده و برگردانده میشود

تا قبل از اینکه هیچ Observable ی درخواست subscribe نکرده، هیچ Promise ی هم ساخته نمیشه.

به محض درخواست از Observable ، یک پرامیس توسط PromiseFactory تعریف شده در defer، ساخته شده و برگردانده میشود.

دقت کنید که وقتی صحبت از Factory میاد وسط یعنی فرایند تصمیم گیری برای ساخت. یعنی در تابع defer ما میتونیم تصمیم بگیریم که چه Promise ی برگردونیم:

در کد بالا موقع اجرای subscribe در خط آخر، تابع defer فراخوانی میشه. اگر Math.random مقداری بزرگتر از 0.5 رو برگردونه، پرامیس به ازای هر کلیکی هر جای صفحه لاگ میندازه و اگر مقداری کوچکتر مساوی 0.5 برگردونه، هر ثانیه عدد برگشتی اینتروال رو لاگ میندازه.


موفق باشید

:)

rxjsjavascriptpromiseجاوااسکریپت
برنامه نویسی یک شغل نیست، یک هنره.
شاید از این پست‌ها خوشتان بیاید