Is store.dispatch in Redux synchronous or asynchronous

58,647

Solution 1

AFAIK, dispatching action is synchronous. In case if you are willing to address the asynchronous call, you can use the thunk-middleware in redux, where dispatch is provided as a callback function which you can invoke as per your convenience. For more info, checkout this answer on SO by Author itself: How to dispatch a Redux action with a timeout?

Solution 2

Nobody knows better than the code itself. =) As you can see dispatch is absolutely synchronous. The only warning here is that store enhancers can (and do) substitute dispatch method. For example, take a look at applyMiddleware enhancer, it lets you jack middlewares in by replacing default dispatch method with its own implementation. Though I never saw any Redux enhancer which would actually remove synchronous nature of dispatch.

Share:
58,647
ps-aux
Author by

ps-aux

Updated on July 08, 2022

Comments

  • ps-aux
    ps-aux almost 2 years

    I realize this is a basic question but I had no luck finding the answer elsewhere.

    Is store.dispatch synchronous or asynchronous in Redux ?

    In case it is asynchronous is there a possibility to add a callback after the action has been propagated as it is possible with React ?

  • shanshine
    shanshine almost 4 years
    You should update the apply middleware link to https://github.com/reduxjs/redux/blob/master/src/applyMiddle‌​ware.ts#L19 (due to the redux migration from js -> ts, I can't make the edit since it's < 6 characters). Or, perhaps you should reference a commit when they still used js like in your code itself link, which would deadlinks due to the 'permalink' aspect of commits.
  • nuclear
    nuclear over 3 years
    But many people suggest me: Don't call dispatch in async flow which make redux state becomes unpredictable, you should sync to call dispatch. But thunk-middleware just call dispatch after await, that's async flow. Which opinion is correct? sorry for my bad English :)
  • A Gupta
    A Gupta over 3 years
    I am not sure about the challenges you are facing, but the overall idea of using thunk action is to facilitate the async flow of the code. e.g. user can dispatch the action once promise is fulfilled.