简介
@superbalist/js-event-pubsub
是一款轻量的事件发布/订阅库,通过它可以简单地实现模块之间的通信。它支持同步与异步事件的发布,同时也可以订阅特定事件的多个处理函数。
安装
在终端中使用 npm 安装:
npm install @superbalist/js-event-pubsub
或者使用 yarn 安装:
yarn add @superbalist/js-event-pubsub
使用说明
发布事件
要发布一个事件,只需调用 EventPubSub.publish()
方法,该方法接受两个参数:事件名称和数据。
import EventPubSub from '@superbalist/js-event-pubsub'; EventPubSub.publish('user:created', { name: '张三', age: 22 });
订阅事件
订阅事件非常简单,只需调用 EventPubSub.subscribe()
方法,该方法接受两个参数:事件名称和处理函数。
EventPubSub.subscribe('user:created', (data) => { console.log(`用户 ${data.name} 已创建,年龄 ${data.age} 岁`); });
同样地,我们也可以订阅多个事件,并指定相应的处理函数。
-- -------------------- ---- ------- -- -- ------------ -- ------------------------------------- ------ -- - --------------- ------------ ------ ----------- ---- --- -- -- ------------ -- ------------------------------------- ------ -- - --------------- ------------ ------------ -------------- ---
取消订阅
如果我们不再需要订阅某个事件,可以使用 EventPubSub.unsubscribe()
方法来取消订阅,该方法也接受两个参数:事件名称和处理函数。取消订阅是非常重要的,如果我们不取消订阅,就会引起内存泄漏和性能问题。
-- -------------------- ---- ------- ----- ----------------- - ------ -- - --------------- ------------ ------ ----------- ---- -- ------------------------------------- ------------------- -- -- ------ ------------- -- - --------------------------------------- ------------------- -- -------
我们在这里创建了一个 handleUserCreated
处理函数,并订阅了事件 user:created
。10 秒后,我们取消了订阅,并传递了该处理函数,这样在之后该处理函数就不会再被调用了。
异步订阅
如果我们需要订阅一个异步事件,只需要在处理函数中返回一个 Promise 对象,当 Promise 对象 resolve 时,处理函数就会被调用。这种方式非常实用,可以应对很多场景,比如:异步请求返回数据时的处理。
-- -------------------- ---- ------- ----- ---------------- - ------ -- - ------ --- ----------------- ------- -- - -- ------ ------------- -- - --------------- ------- ----- ---------- -- ------ --- -- ------------------------------------ ------------------ ---------------------------------- -----------
在这个例子中,我们订阅了一个异步事件 async:event
,并在处理函数中定义了一个异步操作。当事件 async:event
触发时,该处理函数会被调用,并返回一个 Promise 对象。
总结
@superbalist/js-event-pubsub
是一款非常实用的事件发布/订阅库,它可以帮助我们简单地实现模块之间的通信。在实际开发中,我们通常需要进行大量的事件处理,使用该库可以让我们的代码更加简洁和可读性更强。同时,它也支持同步和异步的事件发布,非常灵活。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005707f81e8991b448e7e92