Массив внутри subscribe () пуст при попытке использовать forEach () или map () вне сервиса, но заполнен в сервисе - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь получить доступ к строкам из массива строк, которые возвращаются из наблюдаемой. Когда я пытаюсь сделать это изнутри моего сервиса с помощью следующего кода, все идет хорошо. (метод getAll() возвращает данные из запроса graphQL)

private tags: Observable<any>;

getTags() : Observable<string[]> {
    if (!this.tags)
    {
      var tagsSource = new BehaviorSubject<string[]>(null);
      this.tags = tagsSource.asObservable();

      var tags : string[] = [];
      this.getAll().subscribe(result => {
        result.data.all.forEach(item =>{
          if(item.tags !== null && item.tags !== undefined)
          {
            item.tags.forEach(tag => {
              if(!tag.includes("["))
              {
                if(!tags.includes(tag))
                {
                  tags.push(tag);
                }
              }
            });
          }
        });
      })
      tagsSource.next(tags);
    }
    return this.tags;
  }

этот код возвращает наблюдаемую строку. Когда я подписываюсь на это наблюдаемое за пределами службы, я больше не могу получить доступ к каждой строке отдельно в методе subscribe. У меня есть следующий код:

this.myService.getTags().subscribe(tags => {
  console.log(tags)
  console.log(tags.length)
  this.tags = tags.forEach(tag => {
    console.log(tag)
  });
})

теги в консоли - заполненный массив, но длина возвращается как 0. Отдельные теги также никогда не регистрируются.

Мне нужен доступ к каждой строке в массиве, чтобы я мог преобразовать ее в пользовательский объект. Чего мне не хватает?

...