absinthe v1.4.0-rc.0 Absinthe.Resolution.Helpers View Source

Handy functions for returning async or batched resolution functions

It is automatically imported into all modules using Absinthe.Schema.Notation or (by extension) Absinthe.Schema.

Link to this section Summary

Functions

Execute resolution field asynchronously

Batch the resolution of several functions together

Link to this section Functions

Link to this function async(fun, opts \\ []) View Source
async((() -> term), Keyword.t) :: {:plugin, Absinthe.Middleware.Async, term}

Execute resolution field asynchronously.

This is a helper function for using the Absinthe.Middleware.Async.

Forbidden in mutation fields. (TODO: actually enforce this)

Link to this function batch(batch_fun, batch_data, post_batch_fun, opts \\ []) View Source
batch(Absinthe.Middleware.Batch.batch_fun, term, Absinthe.Middleware.Batch.post_batch_fun, opts :: Keyword.t) :: {:plugin, Absinthe.Middleware.Batch, term}

Batch the resolution of several functions together.

Helper function for creating Absinthe.Middleware.Batch

Example

Raw usage:

object :post do
  field :name, :string
  field :author, :user do
    resolve fn post, _, _ ->
      batch({__MODULE__, :users_by_id}, post.author_id, fn batch_results ->
        {:ok, Map.get(batch_results, post.author_id)}
      end)
    end
  end
end

def users_by_id(_, user_ids) do
  users = Repo.all from u in User, where: u.id in ^user_ids
  Map.new(users, fn user -> {user.id, user} end)
end