Я получаю объект с именем project, который содержит один массив QS и два идентификатора, для каждого из которых я хочу отправить новое действие. первая отправка возвращает массив правильно
.then((project) => dispatch(lastProjectFetchDataSuccess(project.qs)))
но два других возвращают undefined? объект, который я получаю:
{qs:[objects],qpId: "an ID",projectId: "another ID"}
Действие:
export function lastProjectFetchData(url, owner) {
return dispatch => {
dispatch(lastProjectIsLoading(true));
fetch(url, {
method: "POST",
body: JSON.stringify({
owner: "charlie",
projectName: "charliesprojekt"
}),
headers: { "Content-Type": "application/json" }
})
.then(response => {
if (!response.ok) {
throw Error(response.statusText);
}
dispatch(lastProjectIsLoading(false));
return response;
})
.then(response => response.json())
.then(project => dispatch(lastProjectFetchDataSuccess(project.qs))) // returns the array
.then(project => dispatch(qpIdFetchDataSuccess(project.qpId))) // returns undefined
.then(project => dispatch(projectIdFetchDataSuccess(project.projectId))) // returns undefined
.catch(() => dispatch(lastProjectHasErrored(true)));
};
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не возвращаете project из вашего третьего обратного вызова then, поэтому следующие обратные вызовы then получат undefined.
Вместо этого вы можете сделать это:
.then(response => response.json())
.then(project => {
dispatch(lastProjectFetchDataSuccess(project.qs));
return project;
})
.then(project => {
dispatch(qpIdFetchDataSuccess(project.qpId))
return project;
})
.then(project => {
dispatch(projectIdFetchDataSuccess(project.projectId));
return project;
})
.catch(() => dispatch(lastProjectHasErrored(true)));
Вы также можете сделать все это в том же обратном вызове then:
.then(response => response.json())
.then(project => {
dispatch(lastProjectFetchDataSuccess(project.qs));
dispatch(qpIdFetchDataSuccess(project.qpId));
dispatch(projectIdFetchDataSuccess(project.projectId));
})
.catch(() => dispatch(lastProjectHasErrored(true)));
Вы возвращаете вызов dispatch вместо проекта в третьем then, поэтому следующие then получают результат dispatch(), который, вероятно, является undefined.
обязательно возвращайте обещания. Либо так, либо используйте Promise.All [] для нескольких обещаний.