javascript - 如何让 ASync 函数等待,直到收集完所有信息?

标签 javascript node.js reactjs asynchronous

getGrades() {
    let grades = {};
    this.state.courses.map((course) => {
        this.state.studentDetails.map((student) => {
            request.get(`http://localhost:8080/user/${student.id}/grades`).then((response) => {
                if (response) {
                    response.body.map((grade) => {
                        grades[`${student.id}_${course.id}_${grade.gradeType}`] = grade.grade;
                    });
                }
            });
        });
    });

    this.setState({grades: grades});
}

我希望仅在收集所有信息时才调用 this.setState({grades:grades}); 。我怎样才能做到这一点?

最佳答案

您需要按照相反的顺序进行操作。

  1. 获取数据
  2. 设置状态

-

getGrades() {
    const onComplete = (response) => {
        if (response) {
            const grades = {};
            this.state.courses.map((course) => {
                this.state.studentDetails.map((student) => {
                    response.body.map((grade) => {
                        // Not sure this will work after you receive multiple details.
                        // Probably it will require some changes
                        grades[`${student.id}_${course.id}_${grade.gradeType}`] = grade.grade;
                    });
                });
            });
            this.setState({grades: grades});
        }
    }

    // Get IDs of students you need to fetch detail for.
    const studentIds = this.state.studentDetails.map(student => student.id);

    // Fetch details for all students.
    // You have to implement endoint that responds with multiple students details if requested.
    // E.g:
    // Single detail /users/1/grades
    // Multiple details /users/1,2,3/grades
    request.get(`http://localhost:8080/user/${studentIds.join(',')}/grades`).then(onComplete);
}

关于javascript - 如何让 ASync 函数等待,直到收集完所有信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806582/

相关文章:

php - 如何在数据进入 mysql 数据库的同时创建表单而不刷新页面?

javascript - 什么包含[].duplicating : true does in sequelize?

node.js - 在 Ubuntu 中安装 npm 包时出错

javascript - Lodash。除未定义外如何分组

javascript - 触发某些部分仅在我们向下滚动到特定部分时才开始动态加载的功能的事件是什么

node.js - 从 react 记录到 aws cloudwatch

reactjs - 单击三个按钮之一后如何显示特定按钮的内容?单击其中一个按钮后,应隐藏所有按钮

reactjs - 将可访问性 Prop 传递给 Material UI 按钮

reactjs - React、Redux 和 Websocket 的最佳实践(保留一个类来处理请求)

javascript - 单击搜索区域时,程序后退一步(Javascript)