2013-05-08 30 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