2013-05-08 63 views
23

我需要在插入文檔後檢索_id。在Meteor.method調用插入後檢索_id

在客戶端:

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

在服務器

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

我曾嘗試與服務器端的插件的回調函數。這樣我可以得到該文檔的_id,但回調函數內,這不能返回到客戶端調用:

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

回答

37

客戶端調用應使用異步風格 - 從文檔

在客戶端上,如果您沒有傳遞迴調,而您又不在存根中,則調用將返回未定義的值,您將無法獲取該方法的返回值。

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

,那麼你只從方法

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

的好辦法返回ID給過一遍到文檔的這2個部分

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

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

+3

我不得不w它的工作原理是這樣的:'saveDocument:function(value1,value2){var 0D = MyCollection.insert({'value1':value1,'value2':value2});返回newDoc; }' – eloone 2013-12-24 23:55:58

+1

非常好,謝謝。很好的解釋。 – Andy 2017-03-08 22:05:13