2

我有这段代码,我从客户端调用 Meteor 方法并期望回调中的结果。该results对象是一个格式良好的对象,我可以从服务器的控制台对其进行字符串化和打印。

当我运行此代码时,结果有效且没有错误,不会在客户端上调用回调。但是,如果我用 替换fut.return(results)fut.return(JSON.parse(JSON.stringify(results)))则调用回调并且我在客户端中得到“一个字符串”。知道为什么我可以返回一个字符串但没有对象吗?

服务器代码(在Meteor.Methods()):

getUserEvents : function(userId,start,end) {
        var fut = new Future();
        getUserEventsPrivate(userId,start,end,function(err,results){
            if(err){
                fut.throw(new Meteor.Error( 500, 'Oops, something wrong happened'));
            }else{
                fut.return(results); // works when fut.return(JSON.parse(JSON.stringify(results)));
            }
        });
        return fut.wait();
    }

客户:

Meteor.call('getUserEvents',Meteor.user()._id, startStr, endStr,function(err,results){
    console.log(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"
  }
]
4

1 回答 1

1

以这种方式返回一个对象是完全可能的。

您的对象可能不是开箱即用的 EJSON 序列化对象,尽管如果不实际查看它的样本就很难判断。

例如,如果您的对象包含循环引用,EJSON 将静默失败,并且不会调用您的回调。这种情况不太可能发生,因为您可以让 JSON 对其进行序列化。

您可以尝试查找有问题的属性并修改它们,但最好将其注册为使用 EJSON 的自定义类型。

http://docs.meteor.com/#/full/ejson_add_type

无论如何,看到您的实际对象并能够说出更多信息会很有趣。
你用的是什么版本的 Meteor?

于 2015-10-09T06:25:01.067 回答