code: public static Object invokeEach(InvocationContext ctx, Iterator<VisitableCommand> subCommands,
                                     BaseAsyncInterceptor interceptor, Object finalReturnValue) {
        if (!subCommands.hasNext())
           return finalReturnValue;
  
        MultiSubCommandInvoker invoker = new MultiSubCommandInvoker(interceptor, finalReturnValue, subCommands);
        VisitableCommand newCommand = subCommands.next();
        return interceptor.invokeNextThenApply(ctx, newCommand, invoker);
     }
docs: Call {@link BaseAsyncInterceptor#invokeNext(InvocationContext, VisitableCommand)} on a sequence of sub-commands.
  <p>
  Stop when one of the sub-commands throws an exception, and return an invocation stage with that exception. If all
  the sub-commands are successful, return the {@code finalStage}. If {@code finalStage} has and exception, skip all
  the sub-commands and just return the {@code finalStage}.