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% 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: Ссылка
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%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%Tags und Links javascript meteor