我正在一个项目中,我必须让学生注册课程和课程列表。
入门
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函数在它具有值之前执行。这是关于订阅的吗?还是我做错了所有事
答案 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);
}
});
});
});
});