使用带有firestore的rxjs Observable

Jos*_*vez 6 rxjs firebase google-cloud-firestore

我试图在Query#onSnapshot方法上创建一个rxjs observable.这是我的代码:

let observable = Rx.Observable.create(db.collection('conversations')
     .where('members.' + auth.currentUser.uid, '==', true).onSnapshot)
observable.subscribe({next(value){console.log('value', value)}})
Run Code Online (Sandbox Code Playgroud)

我收到的错误是这样的:

TypeError:this.onSnapshotInternal不是函数

似乎onSnapshot方法被设置为duck-typed作为observable.Firestore还没有足够的文档供我解决.

car*_*ant 13

传递onSnapshot给时Rx.Observable.create,您将其未绑定地传递给查询.也就是说,你只是传递了这个Query.prototype.onSnapshot功能.

你可以使用bind,像这样:

const query = db
  .collection('conversations')
  .where('members.' + auth.currentUser.uid, '==', true);
let observable = Rx.Observable.create(query.onSnapshot.bind(query));
observable.subscribe({
  next(value) { console.log('value', value); }
});
Run Code Online (Sandbox Code Playgroud)

或者可以使用箭头功能,如下所示:

let observable = Rx.Observable.create(observer => db
  .collection('conversations')
  .where('members.' + auth.currentUser.uid, '==', true)
  .onSnapshot(observer)
);
observable.subscribe({
  next(value) { console.log('value', value); }
});
Run Code Online (Sandbox Code Playgroud)