简介
pubsub-js 是一个 JavaScript 的发布/订阅模式库,它提供了一种简单的方式来解耦代码中的组件。使用该库可以轻松地实现事件和消息的传递,同时减少代码之间的直接依赖关系。
安装
在使用 pubsub-js 之前,需要先安装它。你可以通过 npm 进行安装:
npm install pubsub-js --save
基本用法
发布订阅模式
pubsub-js 提供了两个核心方法 subscribe
和 publish
。我们可以使用这两个方法来实现发布/订阅模式。
下面是一个基本的示例代码:
-- -------------------- ---- ------- ----- ------ - --------------------- -- ----- ------- --- ------------------------- ----- ----- -- - --------------------- ------- ---------- --- -- ----- ------- --- ----------------------- ---------
上述代码中,我们首先使用 subscribe
方法订阅了一个名为 'hello'
的主题。当发布该主题时,回调函数将被执行并输出 "Received hello: world"
。
订阅者优先级
在某些情况下,我们希望订阅者按照优先级依次执行。对于这种情况,pubsub-js 提供了 subscribe
方法的第三个参数,用于指定优先级。
下面是一个示例代码:
-- -------------------- ---- ------- ----- ------ - --------------------- -- ----- ------- -------- - ------------------------- ----- ----- -- - ----------------------- -- ---------- -- --- -- ----- ------- -------- - ------------------------- ----- ----- -- - ----------------------- -- ---------- -- --- -- ----- ------- --- ----------------------- ---------
上述代码中,我们定义了两个订阅者,并指定了它们的优先级。当发布该主题时,先执行优先级高的订阅者,也就是输出 "Subscriber 2: world"
,再执行优先级低的订阅者,输出 "Subscriber 1: world"
。
指定上下文
在某些情况下,我们希望在回调函数中使用特定的上下文。对于这种情况,pubsub-js 提供了 subscribe
方法的第四个参数,用于指定上下文。
下面是一个示例代码:
-- -------------------- ---- ------- ----- ------ - --------------------- ----- ------- - - ----- ------ -- -- ----- ------- ---------- ------------------------- ------------- ----- - ------------------- -------- -- ---- -- ---------------- -- --------- -- ----- ------- --- ----------------------- ---------
上述代码中,我们在订阅时指定了上下文对象 context
,并在回调函数中使用了该上下文。当发布该主题时,输出 "Hello, world! My name is John."
。
一次性订阅
有时候,我们希望只订阅一次某个主题。对于这种情况,pubsub-js 提供了 subscribeOnce
方法。
下面是一个示例代码:
-- -------------------- ---- ------- ----- ------ - --------------------- -- ----- ------- ---------- ----------------------------- ----- ----- -- - --------------------- ------- ---------- --- -- ----- ------- --- ----------------------- --------- -- - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------