Ich verwende vpulim:node-soap, um einen Soap-Server laufen zu lassen.Async-Funktionen im Meteorserver
Mein Meteor Start des Servers enthält dies unter verschiedenen anderen Code:
authRequestOperation: function(args,cb,headers,req) {
console.log(args);
var authResponceObject = {};
var futureAuthResponse = new Future();
Fiber(function(){
if(collectorUsers.findOne({username: args.username})){
console.log("Found User");
authResponceObject = {
username: args.username,
nonce: Random.id()
};
console.log("authResponceObject is: " + JSON.stringify(authResponceObject,null,4));
console.log("futureAuthResponse returning...");
futureAuthResponse.return(authResponceObject);
}
// console.log("futureAuthResponse waiting...");
// return futureAuthResponse.wait();
}).run();
console.log("authResponceObject after fiber is: " + JSON.stringify(authResponceObject,null,4));
return authResponceObject;
},
Was ich versuche zu tun:
- ich ein Benutzerobjekt vom Client empfangen.
- ich überprüfen, ob der Benutzer in dem mongodb
- vorhanden ist Wenn der Benutzer vorhanden ist, Antwortobjekt
- Respond an den Client mit dem Response-Objekt herzustellen.
Ich habe 1. funktioniert. Da es sich jedoch um einen asynchronen Anruf handelt, ist die Reihenfolge 2,3,4 durcheinander.
Gerade jetzt, was passiert ist:
- erhalten Objekt Client
- Rückkehr Antwortobjekt
- prüfen Mongo (die leer ist)
- Response-Objekt vorbereiten.
Ich verwende Meteor.methods nicht für das oben genannte. Wie mache ich das auf die richtige Art und Weise? Ich habe versucht, Jonglieren um wrapAsync
und fiber/future
, aber Sackgassen zu schlagen.
Warum verwenden Sie 'Fiber' oben in Ihrem Code? '.findOne' ist bereits synchronisiert. Siehst du einen Fehler, wenn du 'Fiber' nicht verwendest? – Khang
Da ich den Code außerhalb von Meteor.methods verwende, muss ich ihn in eine Fiber einpacken. Oder ich bekomme einen Fehler, der besagt, dass Meteor mit einer Faser laufen muss. – blueren