1

我想在meteor.collection.insert的回调中获取新插入的文档的id。

我插入文档如下:

Meteor.call('createDoc', {
    key1: value1,
    key2: value2
})

createDoc 函数如下所示:

Meteor.methods createDoc: (options) ->
    incidents.insert
        key1: options.value1
        key2: options.value2
        , callback(error, result)

callback = (error,result) ->
    console.log result

文档说:

callback Function
Optional. If present, called with an error object as the first argument and,
if no error,the _id as the second.

所以我希望结果返回新的 id,但我得到一个参考错误,说错误和结果没有定义。我在这里做错了什么?非常感谢任何帮助。

4

3 回答 3

4

您的想法大多是正确的,但是您混淆了一些事情。目前,您的 Meteor 方法没有返回任何内容,因为您通过提供回调异步调用插入。可以完成异步方法返回,但它比你需要的简单的东西要复杂得多(查看这个优秀的异步指南以获取更多信息)。

您可以使用不带回调的插入方法并将其分配给变量,而不是使用回调,例如var incidentId = Incidents.insert({ ... });-- return that。

然后,在 的客户端回调中Meteor.call,结果应该是 _id。

于 2013-09-13T11:55:19.637 回答
0

从客户端,如果您从 Meteor.methods 返回,您的回调函数结果将返回最后插入的对象 ID。

Meteor.call('addURL', url, function (error, result) {
    urlId = result;
});

Meteor.methods({
    addURL : function(url) {
        return URL.insert(url);
    }
});

urlId 具有最后插入的对象的 id。

于 2014-12-27T21:43:19.013 回答
-1

BenjaminRH 关于更容易、更有可能做到这一点的方法是正确的。但是,有时您需要服务器来完成工作,并且/或者有些人坚持认为这是在流星中进行数据库工作的唯一方法,以下是您的代码将如何做到这一点:

# server code
Meteor.methods createDoc: (options) ->
  created = incidents.insert
    key1: options.value1
    key2: options.value2
  created

# on client code

Meteor.call 'createDoc', info, (err, data) ->
  if err
    console.log JSON.stringify err,null,2
    # DO SOMETHING BETTER!!
  else
    Session.set('added doc', data )  
    # and something reactive in waiting for session to have 'added doc'
于 2013-09-13T18:21:00.253 回答