2013-05-08 4 views
23

Ho bisogno di recuperare _id dopo aver inserito un documento.Recupera _id dopo l'inserimento in una chiamata Meteor.method

In cliente:

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

In Server

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

ho cercato con la funzione di callback dell'inserto nel lato server. In questo modo posso ottenere _id del documento, ma all'interno della funzione di callback e questo non può tornare alla chiamata cliente:

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. 
} 

risposta

37

la chiamata client deve utilizzare lo stile asincrona - dalla documentazione

Sul client, se non si effettua una richiamata e non si è all'interno di uno stub, la chiamata verrà restituita indefinita e non sarà possibile ottenere il valore di ritorno del metodo.

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

poi basta tornare l'id dal metodo

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

per buona misura dare una volta nel corso di queste 2 sezioni dei documenti

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

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

+3

Ho dovuto w rite in modo che funzioni: 'saveDocument: function (value1, value2) { var newDoc = MyCollection.insert ({'value1': value1, 'valu2': value2}); restituire newDoc; } – eloone

+1

Eccellente, grazie. Ottima spiegazione. – Andy

Problemi correlati