我正在尝试在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)}})
我收到的错误是:
TypeError:this.onSnapshotInternal不是函数
似乎将onSnapshot方法设置为duck-typed作为observable。 Firestore还没有足够的文档供我解决。
答案 0 :(得分: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); }
});
或者可以使用箭头功能,如下所示:
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); }
});