npm 包 graphql-subscriptions 使用教程

阅读时长 5 分钟读完

在 GraphQL 中,我们通过 Subscription 实现了实时数据交互的能力。而为了更方便地使用和管理 Subscription,我们可以使用 npm 包 graphql-subscriptions。

安装和使用

要安装 graphql-subscriptions,我们只需要在终端中运行以下命令即可:

graphql-subscriptions 的核心是 PubSub 类,它允许我们创建一个发布-订阅系统,用于处理 Subscription 请求和响应。下面是一个简单的使用示例:

-- -------------------- ---- -------
----- - ------ - - ---------------------------------

----- ------ - --- ---------

-- --
----- ------------ - --------------------------- --------- -- -
  ---------------------
---

-- --
------------------------- - -------- ------ ------- ---

-- ----
---------------------------

在上面的示例中,我们创建了一个 PubSub 对象,并使用 subscribe 方法订阅了一个名为 'myTopic' 的主题。当我们使用 publish 方法发布了一个带有 { message: 'Hello world!' } 数据的消息时,订阅函数会被触发并打印出该消息的内容。

高级用法

除了基本的订阅和发布之外,graphql-subscriptions 还提供了一些高级的用法,例如:

使用 AsyncIterator

除了使用普通函数作为订阅回调函数之外,我们还可以使用 AsyncIterator,这样就可以更方便地处理异步操作。下面是一个使用 AsyncIterator 的示例:

-- -------------------- ---- -------
----- - ------------ - - ----------------
----- - ------------------ - - --------------------------------------
----- - -------------------- - - ---------------------------------
----- - -------- --------- - - -------------------
----- - ------ - - ---------------------------------

----- -------- - -
  ---- ----- -
    ------ ------
  -

  ---- ------------ -
    --------- ------
  -
--

----- --------- - -
  ------ -
    ------ -- -- ------ --------
  --
  ------------- -
    --------- -
      ---------- ----- ------------ --- - ------ -- -
        ----- ------- - --------------------------------------- ----
        ----- -------- - ----- ------------------------------

        --- ----- ------ ------- -- --------- -
          ----- --------
        -
      --
    --
  --
--

----- ------ - ---------------------- --------- --------- ---
----- ------ - --- ---------

----- ------------------ - --------------------------
  -
    -------
    --------
    ----------
    ---------- -- -- -- ------ ---
  --
  -
    ------- ---------------
    ----- -----------
  --
--

---------------------------------------------------------------

在上面的示例中,我们使用 async function* 定义了一个 Subscription 的订阅函数,并在其中使用 asyncIterator 方法创建了一个 AsyncIterator 对象,然后通过 yield 关键字不断地将订阅到的消息返回给客户端。

使用 withFilter 过滤消息

有时候,我们需要根据一些条件来过滤订阅到的消息。graphql-subscriptions 提供了 withFilter 方法来方便地实现这个功能。下面是一个使用 withFilter 的示例:

-- -------------------- ---- -------
----- - ------- ---------- - - ---------------------------------

----- ------ - --- ---------

----- ------------ - -----------------
  ----------
  -----------
    --------- ---------- -- -
      ------ -------------- --- -----------------
    --
    --------- -- -
      ------ ----------------
    --
  --
--

-- ----
------------------------- -
  ------- ------
  -------- ------ --------
---

-- ----
------------------------
  ---------- -
    ------- ------
  --
  ----- ------- -- -
    -------------------
  --
---

在上面的示例中,我们创建了一个带有 userId 和 message 字段的消息,并且在订阅时通过 withFilter 方法过滤出了符合条件

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/42578

纠错
反馈