如何链接多个redux thunk asyn调用

时间:2017-07-27 20:22:38

标签: reactjs redux react-redux redux-thunk redux-saga

我有一个名为fetchStudentId的函数,如下所示: -

export function fetchStudentId(studentJoiningId) {
  return (dispatch, getState) => {

const state = getState()
blah
blah
blah

const student_data = {my required data ..., studentJoiningId}

const options = {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify(student_data),
  mode: "cors",
}

return fetch("fvfcfgcfcfgc.fcfgcfc/yfcfcgcfg/hffgcfgccg", options)
  .then((json) => {
    dispatch(randomFunction(json))
    dispatch(fetchSudentDetails(json.student_id)
  })
  .catch((error) => {
  })
  }
}

下面是我的fetchSudentDetails函数,我在其中检查响应中存在的名称是" NONE"或者某些事情。

我会一次又一次地调用fetchSudentDetails,直到#34; NONE"

export function fetchSudentDetails(student_id) {

  return (dispatch, getState) => { 
const state = getState()
let fetching = state.fetching

if (fetching) {

  return 
  fetch("xdxfxdfx.com/jvhjv/jbjb")
    .then((json) => {
      switch (json.details.name) {
        case "NONE":
          setTimeout(
            () => dispatch(fetchSudentDetails(student_id)),
            FETCH_OFFER_DELAY
          )
          break
        default: // SUCCESS
          dispatch(setstudentdetails(json.details.complete))
      }
    })
    .catch((error) => {
    })
}
  }
}

所以,如果我为一个学生打电话this.props.fetchStudentJoiningId("jkjnkjnkjnnjkn")

,一切正常

现在,我想同时获取10个学生的详细信息,即 我需要打电话     fetchStudentJoiningId(" jbjhb&#34),      fetchStudentJoiningId(" khbhjbjh&#34),     ....(类似的10个电话) 一旦所有10个调用都成功,那么只需要我的逻辑

所以,我尝试了什么

export function fetchTenStudents(dispatch) {
  return Promise
  .all([dispatch(fetchStudentId("kjhhjbhjb")),
    dispatch(fetchStudentId("vghvg")),
    dispatch(fetchStudentId("kjhhjbgvghvhjb")),
   ...(10 calls)
  ])
  .then(([xx, yy, zz, aa, oo, pp, rr, ss, tt, gvgh]) => {

  })
}

但它抛出以下错误: -     动作必须是普通对象。使用自定义中间件进行异步操作。

在研究这个时,我发现回忆函数fetchSudentDetails()导致了这个问题

我想同时调用10个fetchStudentId()。成功完成所有10个电话后,我需要有我的逻辑。

成功完成每个请求意味着将调用fetchStudentId并且我们将获得学生ID并使用我需要调用fetchStudentDetails的studentntid,并且fetchStudentDetails将调用自己,直到name不是" NONE"。一旦名称不是" NONE",请求就会成功。

我需要等待10次成功完成。我无法一次又一次地改变fetchStudentDetails调用的行为。

我愿意使用redux-saga。

0 个答案:

没有答案