Почему при использовании redux-thunk внутренняя функция что-то возвращает? - PullRequest
0 голосов
/ 29 февраля 2020

Я часто вижу код при использовании redux-thunk, внутренняя функция, возвращающая что-то, например, в официальном Redux asyn c пример :

Код :

const fetchPosts = subreddit => dispatch => {
  dispatch(requestPosts(subreddit))
  return fetch(`https://www.reddit.com/r/${subreddit}.json`)
    .then(response => response.json())
    .then(json => dispatch(receivePosts(subreddit, json)))
}

const shouldFetchPosts = (state, subreddit) => {
  // return true or false
}

export const fetchPostsIfNeeded = subreddit => (dispatch, getState) => {
  if (shouldFetchPosts(getState(), subreddit)) {
    return dispatch(fetchPosts(subreddit))
  }
}

, поэтому fetchPostsIfNeeded() - это гром, и fetchPosts(). Они оба возвращают функцию, и функция тоже что-то возвращает. Теперь эта функция фактически вызывается промежуточным программным обеспечением, и я не думаю, что возвращаемое значение когда-либо использовалось. Так почему же внутренняя функция внутри thunk продолжает что-то возвращать вместо того, чтобы просто вызывать это? Код мог быть:

const fetchPosts = subreddit => dispatch => {
  dispatch(requestPosts(subreddit))
  fetch(`https://www.reddit.com/r/${subreddit}.json`)
    .then(response => response.json())
    .then(json => dispatch(receivePosts(subreddit, json)))
}

const shouldFetchPosts = (state, subreddit) => {
  // return true or false
}

export const fetchPostsIfNeeded = subreddit => (dispatch, getState) => {
  if (shouldFetchPosts(getState(), subreddit)) {
    dispatch(fetchPosts(subreddit))
  }
}

1 Ответ

1 голос
/ 29 февраля 2020

Возвращает обещание, которое позволяет вам добавить обратный вызов в цепочку then и сделать что-то, когда, как в примере, извлекается сообщение о получении кредита.

export const fetchPostsIfNeeded = subreddit => (dispatch, getState) => {
  if (shouldFetchPosts(getState(), subreddit)) {
    dispatch(fetchPosts(subreddit)).then(() => doSomething());
  }
}
...