Angular - Источник данных не определен после ответа HTTP - PullRequest
0 голосов
/ 05 мая 2020

Я хочу создать таблицу с оценками некоторых студентов за курс, если у студента еще нет оценки, мой бэкэнд возвращает 404, в этом случае я хочу вернуть новую оценку. Моя проблема:
Я пытаюсь получить оценку каждого ученика за раз (один запрос на получение для каждого ученика), но когда мой компонент инициализируется (после завершения ngOnInit), мой источник данных представляет собой массив undefined. Я пробовал использовать .toPromise () и .then (), но не смог заставить его работать, та же проблема, проблема в том, что

this.dataSource.push(grade);

вызывается после инициализации компонента.
Вот мой component:


export class EditGradesComponent implements OnInit {
  students: StudentForm[] = new Array<StudentForm>();
  dataSource: Grade[] = new Array<Grade>();
  course: Course;
  displayedColumns: string[] = ['index', 'name', 'grupa', 'nota'];
  constructor(private studentService: StudentService,
              private gradeService: GradeService) {
    this.course = history.state.data.course;
    this.students = history.state.data.students;
    this.students.forEach((student: StudentForm) => {
      gradeService.getGradeByCourseAndStudent(this.course, student).toPromise().then((grade: Grade) => {
        this.dataSource.push(grade);
      });
    });
  }

  ngOnInit() {
  }

}

Вот мой сервис

@Injectable({
  providedIn: 'root'
})
export class GradeService {


  private course: Course;
  private student: StudentForm;
  getGradeByCourseAndStudent(course: Course, student: StudentForm): Observable<Grade>{
    this.course = course;
    this.student = student;
    return this.http.get<Grade>(this.hostname + this.endpoint + '/student/'
        + student.sin + '/course/' + course.id, this.httpOptions).pipe(
          catchError(this.handleError));
  }

  private handleError(error: HttpErrorResponse): Observable<Grade> {
    if (error.error instanceof ErrorEvent) {
      // A client-side or network error occurred. Handle it accordingly.
      console.error('An error occurred:', error.error.message);
    } else {
      // The backend returned an unsuccessful response code.
      // The response body may contain clues as to what went wrong,
      console.error(
        `Backend returned code ${error.status}, ` +
        `body was: ${error.error}`);
    }
    // return an observable with a user-facing error message
    let grade: Grade = new Grade();
    grade.course = this.course;
    grade.student = this.student;
    grade.grade = 0;
    return of(grade);
  }

}

My. html - это просто обычная мат-таблица, проблема в том, как я уже сказал, мой источник данных - это массив неопределенного значения при инициализации компонента;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...