HTTP请求后,forEach中的空值

时间:2018-12-19 02:36:52

标签: angular

我正在一个项目中,我必须让学生注册课程和课程列表。

入门

this.courses = <Array<Course>>[];
this.coursesService.getCourses().subscribe((response: Array<Course>) => {
this.courses = response;
console.log(this.courses);

});

让学生注册课程

this.id = this.router.snapshot.paramMap.get('id');
this.studentService.getStudentsById(this.id).subscribe((response: Student) => {
  this.student = response;
  console.log(this.student);
});

我的代码以获取帮助

this.courses.forEach(function(item, i, object) {
  this.student.enrollments.forEach(function(enrollments, j , objectb) {
      if (item === enrollments) {
        object.splice(i, 1);
      }
  });
});

因此,当我的页面加载时。它没有拼接/删除他当前正在注册的课程中的项目。我认为forEach函数在它具有值之前执行。这是关于订阅的吗?还是我做错了所有事

1 个答案:

答案 0 :(得分:0)

由于getCourses()是异步的,因此程序不会等待响应运行其余代码。因此,到那时,它会运行回调,它将运行foreach代码。 解决方案是在回调内部调用foreach。

this.courses = <Array<Course>>[];
this.coursesService.getCourses().subscribe((response: Array<Course>) => {
this.courses = response;

this.id = this.router.snapshot.paramMap.get('id');
this.studentService.getStudentsById(this.id).subscribe((response: 
Student) => {
  this.student = response;
      this.courses.forEach(function(item, i, object) {
  this.student.enrollments.forEach(function(enrollments, j , objectb) {
      if (item === enrollments) {
        object.splice(i, 1);
      }
  });
});
});
});