2017-04-26 37 views
0

我試圖顯示一條消息,每當一個新記錄添加到我的集合使用collection.observeChanges如下面的代碼所示,但一旦應用程序加載應用程序進入無限循環顯示如下所示的控制檯消息(已添加),那麼有人可以告訴我我在這裏丟失了什麼以及如何修復它,以便僅在新記錄添加到集合時才顯示「添加」消息?謝謝流星雨收集觀測導致無限循環

Template.homePage.helpers({ 
    'notifications'() { 
    let userNotCol = userNotCol.find({ userID: Meteor.userId(), read: false }); 
    userNotCol.observeChanges({ 
     added: function(id, fields){ 
     if(!fields.read){ 
      console.log('added'); // This enters in infinite loop 
     } 
     } 
    }); 
    return userNotCol; 
    } 
}); 
+0

您的光標最初返回多少個文檔? – ghybs

+0

@ghybs約。 19 – MChan

回答

1

我會建議沒有在助手觀察。助手是爲了幫助模板呈現數據。任何邏輯都應該在那裏存在。助手可以多次調用,這可能不是你期望的。

您可以在模板的onCreated()中設置find()和observe()。如果您希望用戶在模板處於活動狀態時進行更改,則可以將find()和observe()包裝在自動運行模塊中。

一旦您調用了添加的處理程序,您可以將結果設置爲反應性變量。那麼你的幫助者除了返回該無功變量的值之外什麼也不做。

0

這可能有助於解決問題。從docs

observeChanges返回實況查詢處理,這是一個 停止方法的對象。在沒有參數的情況下調用stop可以停止調用回調函數並拆除查詢。該查詢將永久運行,直到您致電 。如果從Tracker.autorun 計算中調用observeChanges,則計算重新運行 或停止時會自動停止。 (如果光標與選項反應集創建 假的,它只會提供的初步結果,不會調用任何 進一步回調;它是沒有必要調用停止對手柄)

而且所以問題不是無限循環,而是查詢將永遠運行 - 或者直到停止被調用。