elixir - 对订阅应用过滤器
问题描述
我试图在订阅中应用过滤器,但在解析器文件中遇到了一些问题。
苦艾分辨率需要作为参数 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 ```
解决方案
通常,您可以通过以下两种方式之一确定发送的内容:
A)如果您只想将对象发送给某些订阅者 - 您使用主题作为中间步骤。您字段中的config
函数确定订阅者正在收听的主题,并且在您发布时决定要发布到哪些主题(通过为每个相关主题调用 Absinthe.Subscription.publish 一次,或通过trigger
订阅字段声明中的函数) . 发布到无主题当然是一种选择!
B)如果您只有一个主题供所有订阅者使用,但想根据其内容决定是否发送对象,您可以根据对象决定是否调用Absinthe.Subscription.publish
,或者如果您正在使用trigger
您的功能将决定是否返回主题名称或空列表[]
当您的解析器运行时,absinthe 已经决定将订阅结果发送给订阅者。你不能阻止它发送一些东西,你只能选择什么。我想如果你真的想在你的解析器中做某事,你可以返回{:ok, nil}
以便你的订阅者获得一个null
值并可以处理它,但这很奇怪。
由于在对问题的评论中你说你不能为每个可能的值创建一个主题,我想你可以选择路径 B。
(是的,我在这里从苦艾酒松弛频道重新发布我的回复!希望你看到它并觉得它有用!)
推荐阅读
- python-3.x - 带有模块范围夹具的 pytest-xdist
- javascript - 根据多个类别过滤 JSON
- c# - 保存具有相同对象属性的多个对象 EF 核心
- r - 如何解释线性模型中的分类协变量
- angular - 导航到通过 NGINX 提供的 Angular 应用程序中的相对路径
- java - 如何对数组元素进行分组并获得许多出现的元素?
- google-app-engine - App Engine 中的 Google Cloud Memorystore (Redis) ETIMEDOUT
- powershell - Powershell - 网络使用凭据不起作用
- python - 尝试调整图像大小时出现 DjangoUnicodeDecodeError
- reactjs - 如何在反应中的代码中分配动态值