Ich habe mehrere Meteor.calls, wobei jede Methode von der Antwort einer anderen Meteor-Methode abhängt.Vermeiden Callback Hell mit mehreren Meteor Methodenaufrufen auf Client
Kunde
Meteor.call('methodOne', function(err, resOne){
if(!err){
Meteor.call('methodTwo', resOne, function(err, resTwo){
if(!err){
Meteor.call('methodThree', resTwo, function(err, resThree){
if(err){
console.log(err);
}
})
}
});
}
});
Von Meteor Dokumentation Ich weiß
„auf dem Client läuft genannt Methoden asynchron, so dass Sie einen Rückruf, um passieren müssen 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 eine Möglichkeit, Promises auf dem Client zu verwenden?
Ich kann ehrlich sagen, dass ich etwas gelernt habe - ich habe nie wirklich versprochen und/oder Verkettung Versprechungen, aber wenn mehr als nur sehr einfache Fälle ins Spiel kommen, scheint Bluebird tatsächlich die beste Wahl, nicht nur Leistung. Vielen Dank! – bardzusny
@benjamin funktioniert dies mit Fasern innerhalb der serverseitigen Methodenaufruf? Ich mache externe http.get-Anrufe und die Rückgabe von Fasern ist ein Versprechen. –
@JasonCochran sicher, es würde funktionieren - obwohl ein "mehr Meteor" Weg wäre "Meteor.wrapAsync" und verwenden Sie den Code, als ob es synchron ist. Die "Versprechungsantwort" dazu verwendet Generatoren und Koroutinen (Bluebird.coroutine). Persönlich bevorzuge ich die Versprechen Version, aber beide sind lebensfähig (wie einfache Rückrufe). Nur um extra klar zu sein - es würde funktionieren. –