Reuse current loop with execute #144
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In the spirit of @davidwdan's PR #142, this PR allows the creation of loop events outside an execute context, however it still allows stacking of event loops and provides for consistent testing environments. The model here is inspired by @WyriHaximus's comment, allowing for both the React-style and Amp-style of creating events in the event loop.
With these changes both of the models below work as expected.
Both will output:
Summary of Changes
Loop::execute()
now runs the currently active loop driver when invoked, allowing events to be created outside a running event loop.Loop::execute()
is now optional.Loop::resetDriver()
allows the active loop driver instance to be nulled if a loop is not running, allowing tests to easily reset the environment.Loop::execute()
is invoked, the driver instance will automatically be set to null whenLoop::execute()
returns. If an active driver instance exists whenLoop::execute()
is invoked, that instance will remain as the active driver afterLoop::execute()
returns. This behavior preserves the state ofLoop
before and afterLoop::execute()
is invoked.Loop::createDriver()
is now public to allow usage as the second parameter toLoop::execute()
.Loop::execute()
reuse the same active driver unless an a new instance is provided as the second parameter.Loop::setFactory()
does not reset the active driver instance.