使用 ReactJS,我有两个不同的 API 点,我试图获取和重构它们:students
和scores
. 它们都是一个对象数组。
我的目标是:首先,获取学生和分数,其次,将学生和分数保存在状态中,我将修改它们并根据学生和分数状态创建一个新状态。总之,我有3个功能:getStudents
,getScores
,和rearrangeStudentsAndScores
。getStudents
并且getScores
需要完成rearrangeStudentsAndScores
才能运行。
我的问题是:有时rearrangeStudentsAndScores
会在getScores
完成之前运行。那搞砸rearrangeStudentsAndScores
了。但有时它会完成。不知道为什么它可以在 50% 的时间内工作,但我需要让它在 100% 的时间内工作。
这是我必须fetch
students and scores
在我的Client
文件中的内容:
function getStudents(cb){
return fetch(`api/students`, {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}).then((response) => response.json())
.then(cb)
};
function getScores(cb){
return fetch(`api/scores`, {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}).then((response) => response.json())
.then(cb)
};
然后我将它们组合在一起:
function getStudentsAndScores(cbStudent, cbScores, cbStudentsScores){
getStudents(cbStudent).then(getScores(cbScores)).then(cbStudentsScores);
}
在我的react应用程序中,我有以下内容:
getStudentsAndScores(){
Client.getStudentsAndScores(
(students) => {this.setState({students})},
(scores) => {this.setState({scores})},
this.rearrangeStudentsWithScores
)
}
rearrangeStudentsWithScores(){
console.log('hello rearrange!')
console.log('students:')
console.log(this.state.students);
console.log('scores:');
console.log(this.state.scores); //this returns [] half of the time
if (this.state.students.length > 0){
const studentsScores = {};
const students = this.state.students;
const scores = this.state.scores;
...
}
}
不知何故,当我到达时rearrangeStudentsWithScores
,this.state.scores
仍将是[]
。
我如何确保在运行之前都加载了this.state.students
和?this.state.scores
rearrangeStudentsWithScores