尝试在服务外部使用forEach()或map()时,subscribe()内部的数组为空,但已填充服务

时间:2020-01-19 16:34:42

标签: angular graphql subscribe

我正在尝试从可观察对象返回的字符串数组中访问字符串。当我尝试使用以下代码从服务内部执行此操作时,一切顺利。 (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。单个标签也从不记录。

我想要的是访问数组中的每个字符串,以便可以将其转换为自定义对象。 我想念什么?

0 个答案:

没有答案