Is store.dispatch in Redux synchronous or asynchronous
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
.
ps-aux
Updated on July 08, 2022Comments
-
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 inRedux
?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 almost 4 yearsYou should update the apply middleware link to https://github.com/reduxjs/redux/blob/master/src/applyMiddleware.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 over 3 yearsBut 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 over 3 yearsI 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.