The “vanilla” store implementation you get by calling createStore only supports plain object actions and hands them immediately to the reducer.
However, if you wrap createStore with applyMiddleware, the middleware can interpret actions differently, and provide support for dispatching async actions. Async actions are usually asynchronous primitives like Promises, Observables, or thunks.
C. Seitz, C. Legat, und J. Neidig. Workshops Proceedings of the 5th International Conference on Intelligent Environments, Volume 4 von Ambient Intelligence and Smart Environments, Seite 51--57. Amsterdam, IOS Press, (2009)