包含insert的Meteor方法不返回记录ID作为结果

时间:2015-03-30 01:52:08

标签: javascript meteor

我正在尝试从我的Meteor.methods中发生的插入中返回id。

服务器代码:

Meteor.methods({
  newCompanyReview: insertCompanyReview,
});

function insertCompanyReview(company,text,rating){
  var cid;
  cid = Companies.insert({
    company: company,
    text: text,
    rating: rating,
  });
  console.log(cid);
  return cid;
}

我假设在上面的块中返回cid变量会返回变量。但是,当我在chrome检查器中尝试这个时。

> hello = Meteor.call("newCompanyReview",company="Test");
5WFHWoXgvs3tv8QTo
undefined
>hello
undefined

这确实成功插入到数据库中。为什么不返回id?

2 个答案:

答案 0 :(得分:2)

这里你需要的是callback这个Meteor.call asyncrhonus,就像这样

 Meteor.call("newCompanyReview",company="Test",function(err,result){
      if(!err){
       console.log("The new object id is " + result)
       //or put the id in a Session
        Session.set("newObjectId",result)
      }
})

使用此功能,您只需Session.get("newObjectId")

即可在控制台上运行

答案 1 :(得分:-1)

接受的答案是不完整的。请参阅讨论here。引用史蒂夫:

Meteor方法通常由两部分组成:服务器端部分(我们称之为服务器端方法)和客户端部分(让我们称之为存根) )。

如果要从客户端获取服务器端方法的结果,请使用Meteor.call函数的回调参数:

Meteor.call('myMethod', arg1, arg2, function(error, result) {
    // 'result' is the method return value
});

如果要从客户端获取存根的结果,请使用Meteor.apply函数的未记录参数:

var result = Meteor.apply('myMethod', [arg1, arg2],      { returnStubValue: true });

有些人可能会说使用returnStubValue会产生误导。有关更多信息,请参阅第一个链接。