2013-05-08 22 views
23

Muszę pobrać _id po wstawieniu dokumentu.Odzyskaj _id po wstawieniu w metodzie Meteor.method

W kliencie:

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

W serwerze

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

Próbowałem z funkcji zwrotnej wstawki po stronie serwera. W ten sposób można uzyskać _id dokumentu, ale wewnątrz funkcji zwrotnej i nie można powrócić do rozmowy klienckim:

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

Odpowiedz

37

rozmowa klient powinien wykorzystywać styl asynchronicznej - od docs

Na kliencie, jeśli nie przekazujesz wywołania zwrotnego i nie znajdujesz się wewnątrz kodu pośredniczącego, wywołanie zwróci undefined, a nie będziesz mógł uzyskać wartości zwracanej przez metodę.

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

następnie po prostu wrócić id od sposobu

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

na dokładkę dać raz w ciągu tych 2 odcinkach docs

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

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

+3

Musiałem w rytuuje to tak, aby działał: 'saveDocument: function (value1, value2) { var newDoc = MyCollection.insert ({'wartość1': wartość1, 'wartość2': wartość2}); return newDoc; } ' – eloone

+1

Doskonale, dziękuję. Świetne wyjaśnienie. – Andy

Powiązane problemy