2017-04-26 3 views
0

Ich versuche, eine Nachricht zu zeigen, wenn ein neuer Datensatz meiner Sammlung hinzugefügt wird mit collection.observeChanges wie im folgenden Code gezeigt, aber nach dem Laden der App die App in eine Endlosschleife von eingeben zeigt mir die Konsolennachricht (hinzugefügt) wie unten gezeigt, also kann mir bitte jemand sagen, was ich hier vermisse und wie ich es beheben kann, damit es die 'hinzugefügte' Nachricht nur dann anzeigt, wenn ein neuer Datensatz zur Sammlung hinzugefügt wird? dankeMeteor collection observeChanges verursacht Endlosschleife

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

Wie viele Dokumente gibt der Cursor anfangs zurück? – ghybs

+0

@ghybs ca. 19 – MChan

Antwort

1

ich würde vorschlagen, nicht das Beobachten im Helfer zu haben. Helfer sollen der Vorlage helfen, Daten zu rendern. irgendeine Logik sollte außerhalb dort bestehen. Helfer können mehrmals aufgerufen werden, was Sie nicht erwarten können.

Sie können Ihre find() und beobachten() in der onCreated() der Vorlage einrichten. Wenn Sie erwarten, dass sich der Benutzer ändert, während die Vorlage aktiv ist, können Sie find() und observe() in einen Autorun-Block einbinden.

Sobald der hinzugefügte Handler aufgerufen wird, können Sie das Ergebnis in eine reaktive Variable setzen. dann muss Ihr Helfer nichts anderes tun, als den Wert in dieser reaktiven Variablen zurückgeben.

0

Dies kann helfen, Dinge zu klären. Aus dem docs:

observeChanges gibt einen Live-Abfrage Griff, der ein Objekt mit einer Stop-Methode ist. Call Stop ohne Argumente zu stoppen Callback Funktionen und brechen Sie die Abfrage. Die Abfrage wird für immer ausgeführt, bis Sie dies aufrufen. Wenn observeChanges von einer Tracker.autorun Berechnung aufgerufen wird, wird es automatisch gestoppt, wenn die Berechnung erneut ausgeführt wird oder gestoppt. (Wenn sich der Cursor mit der Option Reaktionssatz zu falsch erstellt wurde, wird es nur die ersten Ergebnisse liefern und werden alle weitere Rückrufe nicht nennen,. Es nicht notwendig ist, auf dem Griff zu nennen zu stoppen)

Und Das Problem ist also keine Endlosschleife, sondern die Abfrage wird für immer ausgeführt - oder bis stop aufgerufen wird.

Verwandte Themen