Observable 不会退出 foreach?

Observable won't exit foreach?

这一定是我在学习 Firebase 时犯下的 space 错误。我想要做的就是获取一个文档(如果它存在),基于它在我没有文档 ID 时包含的值:

myCollection/[some id]/myField:myValue

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

      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)}`)

我错过了什么?或者更大的问题是,我是否正确地处理了这个问题?似乎有很多人 运行 都在忙着拿一份文件...

感谢您的帮助!

您需要将代码更改为

  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 操作