Serialization Meteor/光纤-如何使用Meteor.call回调?
我有这样一段代码,我从客户端调用Meteor方法,并期望在回调中得到结果。Serialization Meteor/光纤-如何使用Meteor.call回调?,serialization,meteor,fiber,Serialization,Meteor,Fiber,我有这样一段代码,我从客户端调用Meteor方法,并期望在回调中得到结果。results对象是一个格式良好的对象,我可以从服务器控制台对其进行字符串化和打印 当我运行这段代码时,如果结果有效且没有错误,则不会在客户机上调用回调。但是,如果我将fut.return(results)替换为fut.return(JSON.parse(JSON.stringify(results)),则会调用回调,并在客户机中获得“字符串”。知道为什么我可以返回一个字符串,但不能返回对象吗 服务器代码(在Meteor.
results
对象是一个格式良好的对象,我可以从服务器控制台对其进行字符串化和打印
当我运行这段代码时,如果结果有效且没有错误,则不会在客户机上调用回调。但是,如果我将fut.return(results)
替换为fut.return(JSON.parse(JSON.stringify(results))
,则会调用回调,并在客户机中获得“字符串”。知道为什么我可以返回一个字符串,但不能返回对象吗
服务器代码(在Meteor.Methods()中)
getUserEvents:function(userId、start、end){
var fut=新未来();
getUserEventsPrivate(用户标识、开始、结束、函数(错误、结果){
如果(错误){
fut.throw(新的Meteor.Error(500,'哎呀,发生了什么事');
}否则{
fut.return(results);//在fut.return(JSON.parse(JSON.stringify(results))时工作;
}
});
返回fut.wait();
}
客户:
Meteor.call('getUserEvents',Meteor.user()。\u id,startStr,endStr,函数(err,results){
控制台日志(结果);
});
编辑
下面是我试图作为“结果”传递的Json:
[
{
"title": "ResponsiveMTL #1",
"start": "2015-10-13T21:30:00.000Z",
"end": "2015-10-14T00:30:00.000Z"
},
{
"title": "Meteor Global Distributed Hackathon",
"start": "2015-10-10T15:00:00.000Z",
"end": "2015-10-11T15:00:00.000Z"
},
{
"title": "retenues a la source",
"start": "2015-10-08T19:25:00.275Z",
"end": "2015-10-08T19:25:00.275Z"
},
{
"title": "Salsa",
"start": "2015-09-19T22:00:00.000Z",
"end": "2015-09-19T23:00:00.000Z"
},
{
"title": "Salsa",
"start": "2015-10-09T22:00:00.000Z",
"end": "2015-10-09T23:00:00.000Z"
}
]
以这种方式返回对象是完全可能的 您的对象可能不是EJSON可即时序列化的,尽管如果不查看它的示例,很难判断 例如,如果对象包含循环引用,EJSON将自动失败,并且不会调用回调。这种情况不太可能发生,因为您可以使用JSON对其进行序列化 您可以尝试查找有问题的属性并修改它们,但最好将其注册为EJSON的自定义类型 不管怎样,看到你的真实物体并能说出更多信息将是一件有趣的事情。
您使用的Meteor版本是什么?尝试将
return fut.wait()
更改为fut.wait();返回未来值
当然result
而不是results
只是一个打字错误,对吗?@apendua当然:)你也可以比较服务器上results
对象在解析/字符串化
技巧之前和之后的情况吗?你可以添加一个results
的示例,或者解释一下它是什么样子吗?服务器控制台中有任何错误或指示吗?我添加了我试图传递给服务器的JSONquestion@NathanZ,请参阅聊天室中的我的评论。希望我们能解决这个问题。有趣的测试用例。