2016-04-24 10 views
0

In Meteor verwende ich den Rückgabewert von Collection.update() (1) auf dem Client, um eine Nachricht an den Benutzer anzuzeigen. Die Methode wird sowohl auf dem Client als auch auf dem Server ausgeführt.Collection.update() mit Callback gibt undefined zurück

Betrachten Sie die folgende Methode, die wie erwartet (kehrt 1) funktioniert:

Meteor.methods({ 
    updateDocument(documentId) { 
     return Collection.update(
      documentId, 
      {$set: {updatedBy: this.userId}} 
     ); 
    } 
}); 

nächstes die folgende Methode betrachten, die undefined zurückgibt:

Meteor.methods({ 
    updateDocument(documentId) { 
     return Collection.update(
      documentId, 
      {$set: {updatedBy: this.userId}}, 
      (error, result) => { 
       return 1; 
      } 
     ); 
    } 
}); 

Was ich hier fehlt? Warum gibt updateDocument() nicht zurück 1?

Antwort

2

Wenn Sie eine Rückruffunktion bereitstellen, ist der Anruf update asynchron. Es gibt nichts zurück und Ihre Meteor-Methode wird möglicherweise beendet, bevor das Update abgeschlossen ist.

Zitiert aus Meteor docs:

auf dem Server, wenn Sie nicht über einen Rückruf zur Verfügung stellen, dann blockiert aktualisieren, bis die Datenbank die Schreib anerkennt, oder wirft eine Ausnahme, wenn etwas schief gelaufen ist. Wenn Sie einen Rückruf bereitstellen, gibt update sofort zurück. Sobald das Update abgeschlossen ist, wird der Rückruf mit einem einzelnen Fehlerargument im Fall eines Fehlers oder einem zweiten Argument aufgerufen, das die Anzahl der betroffenen Dokumente angibt, wenn das Update erfolgreich war.

+0

Ok, danke. Ich denke ich verstehe. Nun, wie kann ich dem Benutzer mitteilen, dass das Update erfolgreich war? Mit anderen Worten: Wie kann die Ereignisfunktion auf dem Client wissen, dass das Dokument erfolgreich aktualisiert wurde, wenn die von ihm aufgerufene Methode nichts zurückgibt? –

+0

Die synchrone "update" -Funktion löst eine Ausnahme aus, wenn ein Fehler auftritt. Sei ein guter Pokemon-Meister und fange sie alle. :) – aedm

Verwandte Themen