Применение фильтров в подписках - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь применить фильтры в подписке, но у меня возникли проблемы с файлом распознавателя.

разрешение абсента требует в качестве параметра 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 голосов
/ 25 марта 2019

Как правило, вы можете определить, что будет отправлено одним из двух способов:

A) Если вы хотите отправить объект только определенным подписчикам - вы используете темы в качестве промежуточного шага.Функция config в вашем поле определяет, какую тему слушает подписчик, и когда вы публикуете, вы решаете, какие темы публиковать (либо вызывая Absinthe.Subscription.publish один раз для каждой соответствующей темы, либо через функцию triggerв вашей декларации поля подписки).Публикация без тем - это вариант, конечно же!

B) Если у вас есть только одна тема для всех подписчиков, но вы хотите решить, отправлять объект или нет, основываясь на его содержимом, вы сами решаете, стоит лидля вызова Absinthe.Subscription.publish на основе объекта или, если вы используете trigger, ваша функция решит, следует ли возвращать имя темы или пустой список []

Когда ваш распознаватель работает,Абсент уже решил, что отправляет подписчику результат подписки.Вы не можете остановить это, посылая что-то, вы просто можете выбрать что.Я думаю, если бы вы действительно хотели что-то сделать в своем преобразователе, вы могли бы вернуть {:ok, nil}, чтобы ваши подписчики получили значение null и могли справиться с этим, но это довольно странно.

Так как в комментариях к вопросу, который вы говорите, вы не можете создать тему для каждого возможного значения, я думаю, вы можете выбрать путь B.

(Да, я публикую здесь свой ответ из канала абсента)! Надеюсь, вы увидите это и найдете это полезным!)

...