在订阅上应用过滤器

时间:2019-03-23 00:02:55

标签: elixir absinthe

我正在尝试在订阅中应用过滤器,但是解析器文件遇到了一些麻烦。

苦艾酒的解析度要求a {:ok,params} o {:error,params}作为参数,因此它可以执行,问题是您发送的所有内容都出现在我的订阅中,我想停止执行,所以什么也没做发送到我的订阅

这就是我尝试过的


  def subscribe(item, args, %{context: %{current_token: _current_token}}) do
    filter_subscription(item, args)
  end

  def subscribe(_args, _info, _ctx) do
    {:error, "Not Authorized"}
  end

  def filter_subscription(item, %{filter: filter}) do
    IO.inspect item
    IO.inspect(filter)

    case filter do
       %{name: name}->
          case String.contains?(item.name, name) do
            true ->
                {:ok, item}
            false ->
                nil
          end
        _hey ->
          IO.puts "error"
    end
  end

end  ```

1 个答案:

答案 0 :(得分:0)

通常,您可以通过以下两种方式之一确定要发送的内容:

A)如果您只想将对象发送给某些订阅者,则可以使用主题作为中间步骤。您字段中的config函数确定订户正在收听的主题,并且在发布时决定要发布的主题(通过为每个相关主题调用Absinthe.Subscription.publish一次,或通过{{ 1}}函数在您的订阅字段声明中)。不发布主题当然是一种选择!

B)如果所有订阅者只有一个主题,但是想根据其内容决定是否发送对象,则可以根据该对象决定是否调用trigger,或者如果您使用的是Absinthe.Subscription.publish,则函数将决定返回主题名称还是返回空白列表trigger

当您的解析器运行时,苦艾酒已经决定向订阅者发送订阅结果。您无法阻止它发送某些东西,只是选择什么。我想如果您真的想要在解析器中执行某项操作,则可以返回[],以便您的订阅者获得一个{:ok, nil}值并可以处理该值,但这很奇怪。 / p>

由于在对问题的评论中您说您不能为每个可能的值创建一个主题,所以我想您可以采用路径B。

(是的,我在这里从苦艾酒松弛频道转发我的回复!希望您能看到并发现它有用!)