Start here. This is the direct spoken answer to practice first.
Overview
A resolver makes data available before activation, but that means navigation waits for the resolver.
I use a resolver when the route cannot render meaningfully without a small piece of essential data, such as validating a required entity or loading metadata needed for the page title. For data that can load progressively, I usually let the component render a loading state instead. A resolver shifts waiting from inside the page to the navigation itself, so the trade-off must be visible to the user.