Angular Typescript загрузить объект из базы данных - PullRequest
0 голосов
/ 08 октября 2018

Я реализовал интерфейс REST на бэкэнде, который связывается с моим угловым сервером внешнего интерфейса для загрузки данных из моего MongoDB.На глобальном уровне классов я определяю массив, в котором все мои проекты хранятся в базе данных:

protected projects: Array<Project> = [];

В моем методе OnInit я пытаюсь поместить все проекты в массив для использования:

for(let i=0; i <this.user.projects.length; i++) {
      this.databaseService.getDocument('Projects', this.user.projects[i])
        .subscribe((project: Project) => {
          this.projects.push(project);
        });
    }

Метод databaseService выглядит следующим образом:

getDocument(collection: string, documentIdentifier: string): any {
    return this.http.get(`${newLink}${collection}/${documentIdentifier}`)
      .pipe(map((res: Response) => res));
  }

Теперь, когда я пытаюсь получить доступ к элементу массива проектов позже в OnInit Я получаю неопределенную / нулевую ошибку:

console.log('Projects' , this.projects[0]);

Хотя массив проекта должен быть заполнен правильно.Может быть, элементы в ошибке не загружены полностью?Потому что, когда я одновременно регистрирую весь массив, он выводится на консоль с сообщением: Значение, указанное ниже, было оценено только сейчас .Кто-нибудь видит, что я делаю не так?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

вы можете попробовать инициализировать объект внутри for после вызова getDocument

for(let i=0; i <this.user.projects.length; i++) {
  this.databaseService.getDocument('Projects', this.user.projects[i])
    .subscribe((project: Project) => {
      this.projects[i] = new Project(); //this line add
      this.projects.push(project);
    });
}
0 голосов
/ 08 октября 2018

Вы делаете асинхронный вызов и, возможно, печатаете журналы вне асинхронного блока.Вы можете попробовать распечатать значение внутри блока синхронизации -

for(let i=0; i <this.user.projects.length; i++) {
      this.databaseService.getDocument('Projects', this.user.projects[i])
        .subscribe((project: Project) => {
          this.projects.push(project);
          console.log("Project Added", project);   //<-- This line is added
        });
    }
...