Async actions

Sometimes you may not want to wait for an action to complete before sending a response back to the client (say if the business logic takes a long time). In such cases you can create an asynchronous action, which returns an action_id immediately to the client before contacting the handler.

If you mark an action as asynchronous, Hasura also generates a query and a subscription field for the action so that you can query/subscribe to its status.

Note

Only actions of type mutation can be async. Actions of type query are always executed synchronously.

For example, let’s say place_order is an asynchronous action

mutation placeOrderRequest($order_input: place_order_input!) {
  place_order(input: $order_input)
}

Executing this mutation will return a response like:

{
  "data": {
    "place_order": "23b1c256-7aff-4b95-95bd-68220d9f93f2"
  }
}

The returned uuid is the action id of the async action. To get the actual response of the action, you can query or subscribe to the action using this action id.

subscription getPlaceOrderResponse {
  place_order (id: "23b1c256-7aff-4b95-95bd-68220d9f93f2") {
    output
    errors
  }
}

Additional Resources

Introduction to Hasura Actions - View Recording.