Skip to content

SyncHook

کلاس قلاب‌های رویدادی همگام، برای پیاده کردن الگوی انتشار-اشتراک.

API

SyncHook

متدهای اصلی

متدتوضیحمقدار بازگشتی
tapمشترک شدن در یک رویدادthis
callبرانگیختن رویدادthis
callSyncبرانگیختن همگام رویداد (فراخوان‌های ناهمگام را هم می‌پذیرد)Promise<this>
onceمشترک شدن تنها برای یک بارthis
offلغو اشتراکthis

نمونه

کاربرد پایه

js
import { SyncHook } from 'ranuts';

const hook = new SyncHook();

// مشترک شدن در رویداد
hook.tap('event1', () => {
  console.log('رویداد ۱ برانگیخته شد');
});

// برانگیختن رویداد
hook.call('event1'); // 'رویداد ۱ برانگیخته شد'

دادن آرگومان

js
import { SyncHook } from 'ranuts';

const hook = new SyncHook();

hook.tap('greet', (name) => {
  console.log(`سلام، ${name}!`);
});

hook.call('greet', 'World'); // 'سلام، World!'

اشتراک یک‌باره

js
import { SyncHook } from 'ranuts';

const hook = new SyncHook();

hook.once('onceEvent', () => {
  console.log('این تنها یک بار رخ می‌دهد');
});

hook.call('onceEvent'); // 'این تنها یک بار رخ می‌دهد'
hook.call('onceEvent'); // چیزی رخ نمی‌دهد

لغو اشتراک

js
import { SyncHook } from 'ranuts';

const hook = new SyncHook();

const callback = () => {
  console.log('فراخوان');
};

hook.tap('event', callback);
hook.call('event'); // 'فراخوان'

hook.off('event', callback);
hook.call('event'); // چیزی رخ نمی‌دهد

فراخوان‌های ناهمگام

js
import { SyncHook } from 'ranuts';

const hook = new SyncHook();

hook.tap('asyncEvent', async () => {
  await new Promise((resolve) => setTimeout(resolve, 100));
  console.log('فراخوان ناهمگام');
});

await hook.callSync('asyncEvent'); // 'فراخوان ناهمگام'

یادداشت‌ها

  1. اجرای همگام: متد call همهٔ فراخوان‌ها را همگام اجرا می‌کند.
  2. پشتیبانی ناهمگام: متد callSync فراخوان‌های ناهمگام را می‌پذیرد و تا پایان همه صبر می‌کند.
  3. مدیریت رویداد: در درون از Map و Set برای نگهداری رویدادها و فراخوان‌ها استفاده می‌کند.
  4. کاربرد: معمولاً در سامانه‌های رویداد، سامانه‌های افزونه و میان‌افزارها به کار می‌رود.

منتشرشده تحت مجوز MIT.