2017-10-09 97 views
4

我試圖在Query#onSnapshot方法上創建一個rxjs observable。這是我的代碼:在firestore中使用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)}}) 

我收到的錯誤是這樣的:

類型錯誤:this.onSnapshotInternal不是一個函數

看來,onSnapshot方法設置爲鴨類型爲一個可觀察的。 Firestore沒有足夠的文檔讓我知道這一點。

回答

5

當您將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); } 
}); 
+0

就是這樣。謝謝。 –