The drawback of this approach is that it keeps you thinking explicitly about the asynchronous nature of the action. From a software engineering perspective, it is bad because it spreads your code for doing the action.

ES2017 Async Functions

Declaring a function as async lets you await inside for the fetch. Like,

let result = await fetch(url).then(response => response.json())
Your code now looks synchronous, and you forget about its asynchronous nature. Moreover, all the asynchronous interaction is now concentrated in one place.

# Structuring the Server Interaction

We usually prefer splitting the server interaction into a server access layer which encapsulates the fetch. That low-level layer is not part of the Redux conceptual architecture for state management.