我正在尝试在订阅中应用过滤器,但是解析器文件遇到了一些麻烦。
苦艾酒的解析度要求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 ```
答案 0 :(得分:0)
通常,您可以通过以下两种方式之一确定要发送的内容:
A)如果您只想将对象发送给某些订阅者,则可以使用主题作为中间步骤。您字段中的config
函数确定订户正在收听的主题,并且在发布时决定要发布的主题(通过为每个相关主题调用Absinthe.Subscription.publish一次,或通过{{ 1}}函数在您的订阅字段声明中)。不发布主题当然是一种选择!
B)如果所有订阅者只有一个主题,但是想根据其内容决定是否发送对象,则可以根据该对象决定是否调用trigger
,或者如果您使用的是Absinthe.Subscription.publish
,则函数将决定返回主题名称还是返回空白列表trigger
当您的解析器运行时,苦艾酒已经决定向订阅者发送订阅结果。您无法阻止它发送某些东西,只是选择什么。我想如果您真的想要在解析器中执行某项操作,则可以返回[]
,以便您的订阅者获得一个{:ok, nil}
值并可以处理该值,但这很奇怪。 / p>
由于在对问题的评论中您说您不能为每个可能的值创建一个主题,所以我想您可以采用路径B。
(是的,我在这里从苦艾酒松弛频道转发我的回复!希望您能看到并发现它有用!)