如何封装这个函数?


export function getMovies(data) {
  return async (dispatch, getState) => {
    dispatch({ type: "loading/turnOn" })
    let [err, response] = await to(api.getMovies(data))
    if (err) {
      dispatch({ type: "loading/turnOff" })
      return Promise.reject(err.message)
    }
    dispatch({ type: "loading/turnOff" })
    return Promise.resolve(response)
  }
}

这是我的actionCreator代码,crud所有的代码都一样,只需要改一个 “getMovies" 这个名字,所以我想要把这个函数封装一下,每次只需要传入一个函数名字就行了。求大佬给封装一下?? 感谢

阅读 1.8k
3 个回答
export function createAction(actionName) {
  return async (dispatch, getState) => {
    dispatch({ type: "loading/turnOn" })
    let [err, response] = await to(api[actionName](data))
    if (err) {
      dispatch({ type: "loading/turnOff" })
      return Promise.reject(err.message)
    }
    dispatch({ type: "loading/turnOff" })
    return Promise.resolve(response)
  }
}
export function createAction(actionName) {
  return async (dispatch, getState) => {
    dispatch({ type: 'loading/turnOn' });
    const [err, response] = await to(api[actionName](data));
    dispatch({ type: 'loading/turnOff' });
    if (err) {
      return Promise.reject(err.message);
    }
    return Promise.resolve(response);
  }
}
export function createAction(fnName, apiFn) {
  return function(data) {
    return async (dispatch, getState) => {
      dispatch({ type: "loading/turnOn" })
      let [err, response] = await to(apiFn(data))
      if (err) {
        dispatch({ type: "loading/turnOff" })
        return Promise.reject(err.message)
      }
      dispatch({ type: "loading/turnOff" })
      return Promise.resolve(response)
    }
  }
}

export const getMovies = createAction('getMovies', api.getMovies)
export const createMovie = createAction('createMovie', api.createMovie)
export const updateMovie = createAction('updateMovie', api.updateMovie)
export const deleteMovie = createAction('deleteMovie', api.deleteMovie)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题