Composes functional guards together into a single functional guard.
Both blocking and non-blocking guards may be specified.
Blocking guards run in serial, waiting for a response before calling the next blocking guard.
If a blocking guard returns a failure condition (falsy or a UrlTree
), all future guards will be skipped and not called. The failure condition return will be returned from the composed guard.
Non-blocking guards are run in parallel after all of the blocking guards have finished.