Meteor: Appel d'une fonction asynchrone à l'intérieur d'un Météore.méthode et renvoie le résultat
Je veux appeler une fonction d'asynchrone à l'intérieur d'un Météore méthode, puis retourner le résultat de cette fonction à un Météore.appel.
Comment est-ce possible?
Meteor.methods({
my_function: function(arg1, arg2) {
//Call other asynchronous function and return result or throw error
}
});
- Sujet mis à jour pour Meteor de 0,8+ en stackoverflow.com/questions/24743402/...
Vous devez vous connecter pour publier un commentaire.
Andrew Mao est droit. Meteor a maintenant Meteor.wrapAsync() pour ce genre de situation.
Voici la façon la plus simple de faire une charge par bande et aussi passer d'une fonction de rappel:
J'ai trouvé ce post très utile:
Meteor: Bonne utilisation du Météore.wrapAsync sur le serveur
Utiliser un Avenir pour le faire. Comme ceci:
Mise à jour:
Pour une utilisation Future à partir de Meteor 0.5.1, vous devez exécuter le code suivant dans votre Bolide.méthode de démarrage:
Mise à jour 2:
Pour une utilisation Future à partir de Meteor 0.6, vous devez exécuter le code suivant dans votre Bolide.méthode de démarrage:
et ensuite utiliser le
return
méthode au lieu de laret
méthode:Voir ce gist.
Future
est un nom commun pour le paquet 🙂Future = Npm.require('fibers/future')
.fut.return(result)
fonctionne pour moi; pourquoi ne pas suivre les ceci?Les versions récentes de Meteor ont fourni les sans-papiers
Meteor._wrapAsync
fonction qui transforme une fonction avec un standard(err, res)
rappel dans une fonction synchrone, ce qui signifie que le courant de la Fibre de rendements jusqu'à ce que le callback retourne, et utilise ensuite un Météore.bindEnvironment pour s'assurer que vous maintenir le Météore variables d'environnement (commeMeteor.userId())
.Une utilisation simple serait que les suivantes:
Vous pouvez aussi avoir besoin d'utiliser
function#bind
pour s'assurer queasyncFunc
est appelée avec le bon contexte avant de l'emballer.Pour plus d'informations, voir: https://www.eventedmind.com/tracks/feed-archive/meteor-meteor-wrapasync
Une autre option est de cette package qui réalise des objectifs similaires.
De l'emballage et du README:
Asynchrone.wrap(fonction)
Envelopper d'une fonction d'asynchrone et permettre de l'exécuter à l'intérieur de Meteor sans rappels.