optimizely / nuclear-js

Reactive Flux built with ImmutableJS data structures. Framework agnostic.
https://optimizely.github.io/nuclear-js/
MIT License
2.23k stars 141 forks source link

When using batch, do not receive error when calling dispatch inside of dispatch #225

Open wrightnathan opened 8 years ago

wrightnathan commented 8 years ago

The following code will not throw an error in console:

in my componentDidMount():

Reactor.batch(() => {
    Reactor.dispatch('DISPATCH1');
})

in my store:

initialize() { 
    this.on('DISPATCH1', (state) => {
        Reactor.dispatch('DISPATCH2');
        return state;
    });
    this.on('DISPATCH2', (state) => { return state.set('blah', foo);} );
}

This will execute DISPATCH2 inside of DISPATCH1, but will result in the changes made by DISPATCH2 being thrown away (instead of receiving an error message).

If I remove the batch, then I receive the following error message:

nuclear.js:5647Uncaught Error: Dispatch may not be called while a dispatch is in progress

code-shoily commented 8 years ago

It is showing that error because you are dispatching DISPATCH2 from within the handler of DISPATCH1. That yielded the error. Try moving that logic to an action.

wrightnathan commented 8 years ago

I realize there's a problem with my code. However, the issue I raised is that you don't get any sort of error from nuclear if you do this inside of a batch.