我有一個 Firestore onSnapshot 偵聽器偵聽檔案的更改,但如果我將它設定為如下狀態,我似乎無法理解它是如何作業的:
constructor(props) {
super(props);
this.fetchChatsListener = null;
}
這就是我設定它的方式:
this.fetchChatsListener = firestore().collection('chats').doc(documentSnapshot.id).collection('messages').where('created', '>=', currenttime);
this.state.sent_message_id != '' ? this.fetchChatsListener.where(firebase.firestore.FieldPath.documentId(), '!=', this.state.sent_message_id) : ''
this.fetchChatsListener.orderBy('created', 'desc')
.onSnapshot({
error: (e) => console.error(e),
next: (querySnapshot_) => {
querySnapshot_.docChanges().forEach(change => {
this.state.dataSource.push({
...change.doc.data(),
key: change.doc.id,
});
});
this.setState({
chatEntered: true,
dataSource: this.state.dataSource,
refreshingMessages: false,
current_chat_id: documentSnapshot.id
});
},
});
我呼叫這個函式來取消訂閱它:
unsubscribe_chats_listener() {
this.fetchChatsListener;
this.fetchChatsListener = null;
}
但不幸的是,它并沒有取消訂閱,因為我不斷收到新的更改。
更新
當我嘗試使用以下方法取消訂閱時:
this.fetchChatsListener();
它因此錯誤而失敗:
TypeError: this.fetchChatsListener is not a function
uj5u.com熱心網友回復:
OP代碼只提到了取消訂閱功能,需要呼叫它。
unsubscribe_chats_listener() {
this.fetchChatsListener(); // note the parens, causing invocation
this.fetchChatsListener = null;
}
編輯
this.fetchChatsListener正在初始化為查詢。查詢不是取消訂閱功能。
this.fetchChatsListener = firestore().collection('chats') // a collection ref
.doc(documentSnapshot.id) // a doc ref
.collection('messages') // a collection ref
.where('created', '>=', currenttime); // a query
onSnapshot() 回傳取消訂閱功能,因此在那里設定屬性...
let query = firestore().collection('chats')
.doc(documentSnapshot.id)
.collection('messages')
.where('created', '>=', currenttime);
this.state.sent_message_id != '' ? query.fetchChatsListener.where(firebase.firestore.FieldPath.documentId(), '!=', this.state.sent_message_id) : ''
query.orderBy('created', 'desc')
this.fetchChatsListener = query.onSnapshot({ // an unsubscribe function
error: (e) => console.error(e),
next: (querySnapshot_) => {
// ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/369205.html
標籤:javascript 火力基地 反应原生 谷歌云firestore 反应原生火力基地
