【问题标题】:List of courses and their students using Goggle Classroom API使用 Google Classroom API 的课程及其学生列表
【发布时间】:2019-09-24 19:12:32
【问题描述】:

我是使用 Google Classroom API 的新手,我正在尝试获取此类课程及其学生的列表:

课程 1:

学生: 学生 1.1 学生 1.2 学生 1.3

课程 2:

学生: 学生 2.1 学生 2.2 学生 2.3 学生 2.4

...

但是我的代码得到了:

课程 1: 课程2:

学生: 学生 1.1 学生 1.2 学生 1.3

学生: 学生 2.1 学生 2.2 学生 2.3 学生 2.4

你知道为什么吗?

    function listCourses() {
      gapi.client.classroom.courses.list({
        pageSize: 10,
      }).then(function(response) {
        var courses = response.result.courses;
        appendPre('Courses:');
        if (courses.length > 0) {
          for (i = 0; i < courses.length; i++) {
            var course = courses[i];
            appendPre(course.name+":"+course.id)
            listStudents(course.id);
          }
        } else {
          appendPre('No courses found.');
        }
      });
    }

    function listStudents(c) {
      gapi.client.classroom.courses.students.list({
        courseId: c
      }).then(function(response) {
        console.log(response.result);
        var students = response.result.students;
        appendPre('students:');
        if (students.length > 0) {
          for (i = 0; i < students.length; i++) {
            var student = students[i];
            appendPre(c+":"+student.userId+":"+student.profile.name.fullName)
          }
        } else {
          appendPre('No students found.');
        }
      });
    }

【问题讨论】:

    标签: javascript google-api google-classroom


    【解决方案1】:

    由于对 gapi.client.classroom.courses.listclassroom.courses.students.list 端点的调用都是异步的,因此您最终会从 course.list 请求中获得响应,然后遍历检索到的每个课程。但是,在您的for 循环中,您发送请求以列出给定课程的学生,但不等待响应,因此创建了承诺,但您的 for 循环在继续之前不等待响应处理下一个课程。

    本质上,您需要将.then( 函数中的所有内容视为一个单独的进程,该进程最终会运行,但不会阻止您的代码执行。调用gapi.client 的返回对象返回一个goog.Thenable,可以像任何其他承诺一样处理。

    根据您正在构建的环境,您可能需要考虑使用 async await (read about it here) 或 Promise 库 (I like bluebird) 以阻塞方式处理这些异步代码块.

    您还需要确保在学生端点上处理分页,因为班级最多可以有 1000 名学生,而且您可能会遇到结果超过一页的班级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多