簡體   English   中英

為什么我必須在這里使用 Firebase 取消訂閱?

[英]Why do I have to use Firebase unsubscribe here?

嘿伙計們,我正在關注 Udemy 指南,我正在使用 Firebase 構建一個小型聊天應用程序,用戶界面看起來像這樣。

https://i.imgur.com/qCBSF35.png

到目前為止,在 JS 中,我已經建立了一個聊天室 class,其中包含一些屬性和一些方法。 其中一種方法是更新聊天室,基本上是當用戶單擊頂部的其中一個按鈕時,我希望房間更新到該房間並從該房間的 Firestore 中檢索聊天文檔。

現在我遇到了一些我仍在努力尋找理解的方法。 我將在下面粘貼整個代碼,以便您理解

getChats(callback) {
        this.unsub = this.chats
        .where('room', '==', this.room)
        .orderBy('created_at')
        .onSnapshot(snapshot => {
            snapshot.docChanges().forEach(change => {
                if(change.type === 'added') {
                    callback(change.doc.data(), change.doc.id);
                }
            });
        });
    }

    updateName(username) {
        this.username = username;
    }

    updateRoom(room) {
        this.room = room;
        if(this.unsub) {
            this.unsub();
        }
    }

因此,如您所見,getChats 方法是一個實時監聽器。 因此,當調用 updateRoom 時,房間應該更新為 function 中傳遞的任何內容,但我不明白為什么我必須取消訂閱? 我的意思是在我更新房間后立即取消訂閱沒有意義? 我知道 onSnapshot 返回一個 function 並且我們可以使用它來取消訂閱實時監聽器,但我也不明白為什么我們需要它? 我們不能沒有它嗎? 我試圖尋找解釋,但沒有什么對我有太大幫助。

該代碼正在取消訂閱您之前訂閱的房間。 正常的流程是:

  1. 取消訂閱以前的房間。
  2. 設置新房間。
  3. 訂閱新房間。

如果不清楚代碼的流程如何,我建議在調試器中單步執行,並在所有重要的方法和塊中設置斷點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM