. NET Angular как получить данные асинхронно - PullRequest
1 голос
/ 19 апреля 2020

Сначала я пытаюсь получить все проекты из базы данных, указав userId из URL. Я делаю это в ngOnInit (). У каждого проекта есть поле Languages ​​, представляющее собой список объектов из другой таблицы Languages. Одна запись в этой таблице имеет поле с именем projectId , с помощью которого я пытаюсь получить все языки для каждого проекта. Я думаю, что у меня есть проблема с асинхронным получением данных, потому что проекты принимаются правильно, но поле languages ​​ в каждом объекте Project является пустым. Что мне делать?

ngOnInit() {
    this.userId = this.route.snapshot.params['id'];
    this.getAllProjectsByUserId(this.userId);
    this.getLanguagesByProjectId();
  }

  getAllProjectsByUserId(id: number) {  //receivng all projects for given userId
    this.portfolioAppService.getAllProjectsByUserId(id).subscribe((data) => {
      this.projectsList = data;
      console.log(this.projectsList);
    },
      error => console.error(error)
    );
  }

  getLanguagesByProjectId() {  //receiving all languages for each project
    this.projectsList.forEach(x => {
      this.portfolioAppService.getLanguagesByProjectId(x.id).subscribe((data) => {
        x.languages = data;
        console.log(this.projectsList);
      },
        error => console.error(error)
      );
    });
  }

1 Ответ

2 голосов
/ 19 апреля 2020

Переместите вызов на getLanguagesByProjectId(), когда проекты будут получены:

  getAllProjectsByUserId(id: number) {  //receiving all projects for given userId
    this.portfolioAppService.getAllProjectsByUserId(id).subscribe((data) => {
      this.projectsList = data;
      console.log(this.projectsList);
      this.getLanguagesByProjectId();
    },
      error => console.error(error)
    );
  }

В противном случае свойство this.projectsList не имеет необходимых значений.

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