Callback Hell mit mehreren Meteor-Methodenaufrufen am Client vermeiden

8

Ich habe mehrere Meteor.calls, wobei jede Methode von der Antwort einer anderen Meteor-Methode abhängt.

Kunde

%Vor%

Aus der Dokumentation von Meteor weiß ich

"Methoden, die auf dem Client aufgerufen werden, laufen asynchron, Sie müssen also einen Callback übergeben, um das Ergebnis des Aufrufs zu beobachten."

Ich weiß, dass ich eine weitere Meteor-Methode auf dem Server erstellen kann, um die Methoden 'methodOne', 'MethodTwo', 'MethodThree' mit Meteor.async oder sequentiell ohne Callback auszuführen. Aber ich bin besorgt, dass dieser Weg meine Meteormethoden dazu bringen wird, aufgebläht und verstrickt zu werden, was zu Spaghetti-Code führt. Ich würde lieber jede Meteor Methode einfach mit einem Job machen und eine elegantere Methode finden, die Anrufe auf dem Client zu verketten. Irgendwelche Ideen, gibt es irgendeine Möglichkeit, Promises auf dem Client zu verwenden?

    
Robin 20.02.2015, 16:01
quelle

3 Antworten

13

Da die andere Antwort RSVP vorschlägt, wird diese Antwort Bluebird vorschlagen, die tatsächlich die am schnellsten versprochene Bibliothek ist, wenn real Benchmarks . Anstatt a micro Benchmark , die nicht wirklich etwas Sinnvolles misst. Wie auch immer, ich wähle es nicht für die Leistung, ich nehme es hier, weil es auch am einfachsten zu verwenden ist und das mit der besten Debuggability.

Im Gegensatz zur anderen Antwort unterdrückt dieser auch keine Fehler, und die Kosten für die Rückgabe einer Verheißung durch die Funktion sind gering, da kein vielversprechender Konstruktor aufgerufen wird.

%Vor%     
Benjamin Gruenbaum 20.02.2015, 16:26
quelle
3

Ihre Vorgehensweise auf dem Client führt zu viel mehr Rundreisen zwischen dem Server und dem Browser. Ich weiß, dass Sie angegeben haben, dass Sie sich Sorgen über Spaghetti Code auf dem Server gemacht haben und ich habe keinen Einblick in Ihre Anwendung wie Sie, aber durch das von Ihnen bereitgestellte Beispiel scheint es ein idealer Ort zu sein, um alle drei Anrufe auf die Server und mache nur einen Anruf vom Client, IMHO.

    
Larry Maccherone 20.02.2015 16:47
quelle
3

EDIT: Sie sind wahrscheinlich besser dran @Benjamin Gruenbaum Antwort, die nicht nur bessere Leistung, sondern bietet auch viel prägnanter Code.

Versprechen - ja, gibt es.

Ich mag RSVP sehr, warum? Einfach weil es das schnellste ist. (kurzer Benchmark: jsperf ).

Hier ist eine schnelle Umschreibung Ihres Codes:

%Vor%

Das ist der Weg, um "die immer nach rechts driften" Ihres Codes zu verhindern.

Versprechen sind cool, benutze sie.

    
bardzusny 20.02.2015 16:10
quelle