Optional
endCollect all the values used in the step and pass to Step#runWith. Then replace the collected values with those returned by Step#runWith.
This method concludes by starting the next step, if there is one. Not starting the next step can cause the action to end prematurely. This should be noted if overriding this method in a subclass. It is best to override Step#runWith if you just want to implement the step's own behaviour.
Optional
parent: Step
Default execution is to call all function values in parallel and/or yield any generators. The final result from calling the functions will also be yielded if it is not undefined. All other values, along with non-generator function return values are used to build the args for the next function encountered. Will also yield generators returned by fuctions.
WithStep executes by calling any function values with the scope and main args as the first 2 arguments followed by any further arguments built within the step.
Where a generator is encountered, either among the values or as a function return value, it will immediately be yielded and 'forgotten'.
The final result from calling the functions will be yield*ed if it is not undefined.
All yielded values effectively replace the step and all its input values in the list of values used in the rest of the action
All other values are used to build the args for the next function encountered.
Example