可观察的不会退出foreach吗?

时间:2019-08-28 16:12:12

标签: angular foreach observable angularfire

这一定是我学习Firebase时遇到的顶空错误。我要做的就是根据没有文档ID时包含的值获取文档(如果存在)

  

myCollection / [某些ID] / myField:myValue

我正在尝试使用ValueChanges遍历可观察对象,并查看基于where子句的文档是否存在。我得到了我要查找的文档,但是我实际上无法使用它,因为当我遍历可观察对象中的数组时,它似乎永远不会返回。我可以将项目记录到控制台,但是在循环之后永远不会得到结果:

      var colRef: AngularFirestoreCollection<MyType>;
      var obs$: Observable<MyType[]>;

      colRef = this.afs.collection<MyType>('myCollection', ref => {
         return ref.where('myField', '==', 'myValue');
      });

      obs$ = colRef.valueChanges();
      var result = obs$.forEach(x => 
      {
         var item = x[0];
         // get here OK
         console.log(`item = ${JSON.stringify(item)}`)
         return item;
      })

      // never get here
      console.log(`result = ${JSON.stringify(result)}`)

我想念什么?还是更大的问题是,我是否正确地解决了这个问题?似乎要四处奔波以获取文档...

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要将代码更改为

  var colRef: AngularFirestoreCollection<MyType>;
  var obs$: Observable<MyType[]>;

  colRef = this.afs.collection<MyType>('myCollection', ref => {
     return ref.where('myField', '==', 'myValue');
  });

  obs$ = colRef.valueChanges();
  obs$.subscribe((x: MyType[]) => 
  {
     console.log(x);  
  });

请注意,这是一个async操作,您将其视为sync操作