2013-05-08 7 views
23

J'ai besoin de récupérer _id après avoir inséré un document.Récupérer _id après insertion dans un appel Meteor.method

En client:

Meteor.call('saveDocument', value1, value2); 

Dans le serveur

saveDocument: function (value1, value2) { 
    MyCollection.insert({ 'value1': value1, 'value2': value2}); 
} 

J'ai essayé avec la fonction de rappel de l'insert dans le côté serveur. De cette façon, je peux obtenir le _id du document, mais à l'intérieur de la fonction de rappel et cela ne peut pas revenir à l'appel du client:

saveDocument: function (value1, value2) { 
    MyCollection.insert({ 'value1': value1, 'valu2': value2}, 
     function(err, docsInserted){ console.log(docsInserted) }); 
     //Works, but docsInserted can't return to the client. 
} 

Répondre

37

votre appel client doit utiliser le style async - de la documentation

Sur le client, si vous ne passez pas de rappel et que vous n'êtes pas dans un stub, l'appel renverra undefined, et vous n'aurez aucun moyen d'obtenir la valeur de retour de la méthode.

Meteor.call('saveDocument', value1, value2, function(error, result){ 
    var theIdYouWant = result; 
}); 

vous suffit de retourner l'identifiant de la méthode

saveDocument: function (value1, value2) { 
    return MyCollection.insert({ 'value1': value1, 'valu2': value2}); 
} 

pour faire bonne mesure donner une fois sur ces 2 sections de la documentation

http://docs.meteor.com/#meteor_call

http://docs.meteor.com/#insert

+3

Je devais w rite comme ça pour que cela fonctionne: 'saveDocument: function (valeur1, valeur2) { var nouveauDoc = MyCollection.insert ({'value1': value1, 'valu2': value2}); return newDoc; } ' – eloone

+1

Excellent, merci. Bonne explication. – Andy

Questions connexes