The sample apps for ngxs typically dispatch discrete success / failed actions for every asynchronous action.
For example: https://github.com/tommythongnguyen/Ngxs-Pizza-Order/blob/master/src/app/products/store/pizzas.state.ts#L45
To me it makes more sense to simply observe the dispatch, if you want to wait for an action to succeed/fail.
For most cases, you would only care about failure, as to read the data back out of the store, I'd be expect to be using independent selects rather than looking at the action stream.
In terms of handling failure, I think that normally it would be the dispatcher who would be interested in handling a failure.
Stackblitz showing my preferred approach: https://stackblitz.com/edit/angular-ngxs-so-question
Is this pattern just a hold over from flux / redux where the dispatches don't return a handle on an async action? Or is some benefit to this approach that I'm not seeing?