我正在尝试从我的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?
答案 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
会产生误导。有关更多信息,请参阅第一个链接。