MeteorJS asynchroner Code innerhalb der synchronen Meteor.methods-Funktion

8

Wie bekomme ich den Client method.call um auf eine asynchrone Funktion zu warten? Derzeit erreicht es das Ende der Funktion und gibt undefined zurück.

Client.js

%Vor%

Server.js

%Vor%     
Pastor Bones 02.11.2012, 06:20
quelle

3 Antworten

6

Neueste Versionen von Meteor haben die undokumentierte Meteor._wrapAsync -Funktion bereitgestellt, die eine Funktion mit einem standardmäßigen (err, res) -Rückruf in eine synchrone Funktion umwandelt, was bedeutet, dass die aktuelle Fiber-Ausbeute bis zum Rückruf zurückkehrt und dann Meteor.bindEnvironment verwendet dass Sie die aktuellen Meteor-Umgebungsvariablen beibehalten (z. B. Meteor.userId()) .

Eine einfache Verwendung wäre wie folgt:

%Vor%

Sie müssen möglicherweise auch function#bind verwenden, um sicherzustellen, dass asyncFunc vor dem Einschließen mit dem richtigen Kontext aufgerufen wird. Für weitere Informationen siehe: Ссылка

    
Andrew Mao 04.02.2014, 03:21
quelle
6

Ich konnte die Antwort in diesem Kern finden. Um asynchronen Code innerhalb einer Methode auszuführen, verwenden Sie Futures, die Ihre Funktion zwingt zu warten.

%Vor%     
Pastor Bones 02.11.2012 11:29
quelle
0

Update: Entschuldigung, ich hätte die Frage besser lesen sollen. Es sieht so aus, als ob diese Frage auch gestellt und beantwortet wurde hier .

Abgesehen von Futures könnte ein anderes zu überprüfendes Muster darin bestehen, ein anderes Modell mit den vom asynchronen Aufruf zurückgegebenen Daten zu aktualisieren und dann die Änderungen dieses Modells zu abonnieren.

Aus der meteor.call-Dokumentation sieht es so aus, als sollte das Ergebnis-Argument (err, res) Ihrer Callback-Funktion die Ausgabe enthalten Ihrer openSession-Funktion. Aber Sie geben keine Werte von Ihrer openSession-Funktion zurück, so dass der Rückgabewert nicht definiert ist.

Sie können dies testen:

Kunde:

%Vor%

Server:

%Vor%     
Harry Love 02.11.2012 21:10
quelle

Tags und Links