我有一个名为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。