About dispatch Asynchronous action in redux

in redux, dispatch asynchronous action, is usually written as 1. But do not understand the difference between 1 and 2, ask for guidance!

const fetchPosts = (postTitle) => (dispatch, getState) => {
  dispatch({ type: "FETCH_POSTS_REQUEST" });
  return fetch(`/some/API/${postTitle}.json`)
    .then(response => response.json())
    .then(json => dispatch(receivePosts(json)));
  };
};

//1
store.dispatch(fetchPosts("reactjs")).then(() =>
     //do sth.
);

//2
fetchPosts("reactjs").then(() =>
     //do sth.
);
Apr.01,2021

2 is miswritten because the return value of fetchPost ('reactjs') is not a promise
1. Why can it be written this way?
take the use of redux-thunk as an example, the encapsulated dispatch method is actually the following function (see github for the complete code)

function (action) {
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }
    
    return next(action);
};

so store.dispatch (fetch ('reactjs')) split into two steps
first step: fetch (' reactjs') returns the following function

(dispatch, getState) => {
  dispatch({ type: 'FETCH_POSTS_REQUEST' });
  return fetch(`/some/API/${postTitle}.json`)
    .then(response => response.json())
    .then(json => dispatch(receivePosts(json)));
  };
};

step 2: call the function returned in step 1 and pass in the corresponding parameters

Menu